В списке рассылки Full-Disclosure опубликован [3] эксплоит, позволяющий удалённому злоумышленнику выполнить на сервере код с правами root, при условии если у атакующего имеется рабочий пользовательский аккаунт в системе, работа которого ограничена домашней директорией через помещение в chroot (во FreeBSD ftpd используется /etc/ftpchroot). Уязвимости также подвержены анонимные FTP-серверы, на которых пользователь имеет возможность записи в директорию /home или в /lib и /etc (например, системы анонимной загрузки файлов с доступным на запись корнем). Наличие уязвимости подтверждено в ftpd из состава FreeBSD 8.2 и в ProFTPD [4], включая последний выпуск 1.3.4a.
Уязвимость в ftpd вызвана [5] особенностью выставления uid/euid для рабочего процесса: во время работы с файлами меняется только euid, который влияет на операции с файлами, а uid остаётся неизменным. При выполнении /bin/ls после вызова команды STAT отсутствует проверка на сочетание uid=0 и euid!=0, что приводит к попыткам загрузки библиотеки /lib/nss_compat.so с правами uid 0 (root). Разместив фиктивную библиотеку "~/lib/nss_compat.so.1" в домашней директории и создав "~/etc/nsswitch.conf" для активации NSS, при изоляции аккаунта в chroot в рамках данной домашней директории, библиотека окажется в директории /lib относительно нового корня и будет вызвана из libc с uid root и euid текущего непривилегированного пользователя.
Официальных патчей с исправлением проблемы пока нет, но для FreeBSD на скорую руку подготовлен [6] неофициальный патч, позволяющий блокировать работу эксплоита. Дополнительно опубликован видеоролик [7] с детальной демонстрацией работы эксплоита. Следует заметить, что код с правами root запускается после создания chroot, что ограничивает его работу директорией пользователя.
Ссылки:
[1] http://htfl.ru/cat-news-freebsd
[2] http://htfl.ru/cat-news-uyazvimosti-po
[3] /out.php?link=http://seclists.org/fulldisclosure/2011/Nov/452
[4] /out.php?link=http://www.proftpd.org/
[5] /out.php?link=http://lists.freebsd.org/pipermail/freebsd-security/2011-November/006086.html
[6] /out.php?link=http://lists.freebsd.org/pipermail/freebsd-security/2011-December/006089.html
[7] /out.php?link=http://seclists.org/fulldisclosure/2011/Dec/30