Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #83, НОЯБРЬ 2005 г.

Суровый байт-одиночка

1dt.w0lf

Хакер, номер #083, стр. 083-064-5


Злосчастное переполнение возникало, когда длина пути, к которому осуществляется обращение, равнялась MAXPATHLEN+1 символам. Переполнение отведенного буфера позволяло перезаписать информацию в стеке. Уязвимость - результат некорректного использования переменой rootd при вычислении длины конкатенированной строки:

/*

* Join the two strings together, ensuring that the right thing

* happens if the last component is empty, or the dirname is root.

*/

if (resolved[0] == '/' && resolved[1] == '\0')

rootd = 1;

else

rootd = 0;

if (*wbuf) {

if (strlen(resolved) + strlen(wbuf) + rootd + 1 > MAXPATHLEN) {

errno = ENAMETOOLONG;

goto err1;

}

if (rootd == 0)

(void) strcat(resolved, "/");

(void) strcat(resolved, wbuf);

}

В результате, при помощи любой FTP-команды возможно переполнить буфер и перехватить управление программой.

На некоторых системах использовать этот баг невозможно. Такой облом возникает в случае, когда размер отведенного под строку буфера, больше, чем MAXPATHLEN. Это верно для wu-ftpd, собранных на версиях линуксового ядра, в которых длина PATH_MAX и MAXPATHLEN жестко зафиксирована на 4095 байтах - например, 2.2.x и ранние 2.4.x. Поэтому использовать сплоит для этой дыры можно только против ftpd-демонов, собранных на 2.0.x или более поздних 2.4.x.

INFO

Несмотря на кажущуюся незначительность этой уязвимости, от нее пострадали весьма уважаемые проекты: mod_ssl и wu-ftpd. Как ты уже понял, даже перезаписав один байт в стеке, возможно захватить управление программой.

CD

На нашем диске ты найдешь отладчик gdb, уязвимую версию wu-ftpd для экспериментов, а также исходник сплоита для этого демона. Экспериментируй на своем компьютере!

WWW

Скачать сплоит для wu-ftpd можно здесь: www.security.nnov.ru/files/0x82-wu262.c

Назад на стр. 083-064-4  Содержание