Security Lab

Уязвимость форматной строки в Oracle9i Application Server

Дата публикации:18.02.2003
Всего просмотров:1221
Опасность:
Наличие исправления:
Количество уязвимостей:1
CVE ID: Нет данных
Вектор эксплуатации:
Воздействие:
CWE ID: Нет данных
Наличие эксплоита: Нет данных
Уязвимые продукты:
Описание: Oracle's 9i Application Server включает полнофункциональный Web сервер, интегрированный с базой данных ORACLE. Последний выпуск Application Server 9.0.2 поддерживает работу с WebDAV (Web Distributed Authoring and Versioning), который позволяет совместно использовать файлы через Web интерфейс.

В функции регистрации в WebDAV обнаружена уязвимость форматной строки. Если атакующий использует метод COPY и представляет URI, который использует схему, отличную от COPY, будет возвращена 502 Bad Gateway ошибка. Эта ошибка будет зарегистрирована, и функция регистрации ошибки содержит уязвимость форматной строки. Moddav для Apache не уязвим, так как в нем не регистрируются Bad Gateway ошибки. Рассмотрим исходный код moddav (mod_dav.c revision 1.157):

..
..
lookup = dav_lookup_uri(dest, r);
if (lookup.rnew == NULL)
{
      if (lookup.err.status == HTTP_BAD_REQUEST)
      {
            ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO,
r,lookup.err.desc);
            return HTTP_BAD_REQUEST;
      }
      return dav_error_response(r, lookup.err.status, lookup.err.desc);
}
..
..
Этот код вызывает функцию dav_lookup_uri() в dav_util.c. Рассмотрим dav_util.c revision 1.84:

..
dav_lookup_result dav_lookup_uri(const char *uri, request_rec * r)
{
..
..
if (strcasecmp(comp.scheme, scheme) != 0 || comp.port != port)
{
      result.err.status = HTTP_BAD_GATEWAY;
      result.err.desc = ap_psprintf(r->pool,
      "Destination URI refers to different "
      "scheme or port (%s://hostname:%d)\n"
      "(want: %s://hostname:%d)",
      comp.scheme ? comp.scheme : scheme,
      comp.port ? comp.port : port,
      scheme, port);

      return result;

..
..
}
Когда dav_lookup_uri() возвращается к mod_dav.c, можно представить специально сформированную строку формата:
..
lookup = dav_lookup_uri(dest, r);
if (lookup.rnew == NULL)
{
      if (lookup.err.status == HTTP_BAD_REQUEST)
      {
      // THIS IS THE FIRST FORMAT STRING VULNERABILITY
      ap_log_rerror(APLOG_MARK, APLOG_ERR | APLOG_NOERRNO,
r,lookup.err.desc);
..
..
}

Представляя специально сформированную строку формата и посылая ее серверу, атакующий перезаписать адрес возврата произвольными значениями, которые позволят атакующему выполнить произвольный код с привилегиями Web сервера.

Уязвимость обнаружена в Oracle9i Application Server Release 9.0.2