Security Lab

Удаленное выполнение произвольного кода в Wu-ftpd FTP сервере

Дата публикации:01.08.2003
Всего просмотров:1187
Опасность:
Наличие исправления:
Количество уязвимостей:1
CVE ID: Нет данных
Вектор эксплуатации:
Воздействие:
CWE ID: Нет данных
Наличие эксплоита: Нет данных
Уязвимые продукты:
Описание: Переполнение буфера обнаружено в Wu-ftpd FTP сервере. Удаленный атакующий может выполнить произвольный код на системе с root привилегиями.

off-by-one переполнение обнаружено в функции fb_realpath().Переполнение происходит, когда длина созданного пути равна MAXPATHLEN+1символам, в то время как размер буфера равен MAXPATHLEN. Переполненный буфер находится в стеке.

Ошибка связанна с неправильным использованием переменной 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 командам, но атакующий должен создать глубокую структуру каталога.

Уязвимы следующие FTP команды:

	STOR
	RETR
	APPE
	DELE
	MKD
	RMD
	STOU
	RNTO 
Эта уязвимость может быть неэксплуатируемая, если размер буфера более MAXPATHLEN символов. Это может произойти, если wu-ftpd компилирован с некоторыми версиями LINUX ядра, в которых PATH_MAX (и MAXPATHLEN соответственно) равен 4095 символам. В этом случае, буфер дополняется дополнительным байтом из-за выравнивания переменной в результате оптимизации кода.

Linux 2.2.x and некоторые ранние версии Linux 2.4.х определяют PATH_MAX к 4095 символам. Т.е. уязвимы только системы с ядром 2.0.x и последними версиями 2.4.x. Для успешной эксплуатиции удаленный атакующий должен иметь привилегии на записть на FTP сервере.

Уязвимость проверена на Linux 2.4.19 с wu-ftpd 2.5.0 <= 2.6.2

Ссылки: wu-ftpd fb_realpath() off-by-one bug