Security Lab

Множественные уязвимости в mod_gzip 1.3.x debug mode

Дата публикации:08.10.2003
Всего просмотров:1802
Опасность:
Высокая
Наличие исправления:
Количество уязвимостей:1
CVE ID: Нет данных
Вектор эксплуатации:
Воздействие:
CWE ID: Нет данных
Наличие эксплоита: Нет данных
Уязвимые продукты:
Уязвимые версии: mod_gzip 1.3.x debug mode

Описание: Множественные уязвимости обнаружены в режиме отладки mod_gzip. Удаленный атакующий может выполнить произвольный код на уязвимой системе. Локальный пользователь может получить root привилегии на системе.

1. Удаленный пользователь может запросить чрезмерное длинное имя файла, чтобы вызвать переполнение буфера в механизме регистрации. Уязвимость может использоваться для выполнения произвольного кода с привилегиями Web сервера.

2. Удаленный пользователь может представить специально обработанный HTTP GET запрос, чтобы вызвать уязвимость форматной строки в механизме регистрации Apache Web сервера. Атакующий может выполнить произвольный код.

3. Третья уязвимость связанна с небезопасным созданием временных файлов. Локальный пользователь может создать символьную ссылку с временного файла к произвольному критическому файлу на системе. Когда mod_gzip будет запущен, критический файл будет перезаписан. mod_gzip регистрирует некоторые события отладки с root привилегиями, т.е. уязвимость позволяет локальному пользователю получить root привилегии на системе.

Пример/Эксплоит:

URL производителя:http://sourceforge.net/projects/mod-gzip/

Решение: Установите следующее исправление (patch < mod_gzip.diff):

--- mod_gzip_debug.c	2003-10-06 18:10:47.000000000 +0200
+++ mod_gzip_debug.patch	2003-10-06 18:13:53.000000000 +0200
@@ -94,6 +94,7 @@
 #include "httpd.h"
 #include "http_config.h"
 #include "http_log.h"
+#include <stdlib.h>
 
 #include "mod_gzip.h"
 #include "mod_gzip_debug.h"
@@ -125,7 +126,7 @@ void mod_gzip_printf( const char *fmt, .
 
  va_start( ap, fmt );
 
- l = vsprintf( log_line, fmt, ap );
+ l = vsnprintf( log_line, sizeof(log_line), "%s", fmt, ap );
 
  va_end(ap);
 
@@ -138,6 +139,8 @@ void mod_gzip_printf( const char *fmt, .
 
 void mod_gzip_printf( const char *fmt, ... )
 {
+ long rndNum;
+ time_t seed = time(NULL);
  int   l;
  char *p1;
  FILE *log;
@@ -153,6 +156,11 @@ void mod_gzip_printf( const char *fmt, .
  long pid = (long) getpid();
  #endif
 
+ srand(seed);
+
+ rndNum = 1+ (int)(1000.0*rand()/(RAND_MAX+1.0));
+ rndNum *= pid; 
+
  #ifdef WIN32
  sprintf( logname, "c:\\temp\\t%ld.log",(long)pid);
  #else
@@ -168,7 +176,7 @@ void mod_gzip_printf( const char *fmt, .
 
  va_start( ap, fmt );
 
- l = vsprintf(log_line, fmt, ap);
+ l = vsnprintf(log_line, sizeof(log_line), "%s",fmt, ap);
 
  p1=log_line;
  while((*p1!=0)&&(*p1!=13)&&(*p1!=10)) p1++;

Ссылки: ZH2003-3SP (security patch): multiple vulnerabilities in mod_gzip 1.3.x debug mode