Переполнение буфера обнаружено в 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.

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии