В списке рассылки Full-Disclosure опубликован эксплоит, позволяющий удалённому злоумышленнику выполнить на сервере код с правами root, при условии если у атакующего имеется рабочий пользовательский аккаунт в системе, работа которого ограничена домашней директорией через помещение в chroot (во FreeBSD ftpd используется /etc/ftpchroot). Уязвимости также подвержены анонимные FTP-серверы, на которых пользователь имеет возможность записи в директорию /home или в /lib и /etc (например, системы анонимной загрузки файлов с доступным на запись корнем). Наличие уязвимости подтверждено в ftpd из состава FreeBSD 8.2 и в ProFTPD, включая последний выпуск 1.3.4a.

Уязвимость в ftpd вызвана особенностью выставления 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 на скорую руку подготовлен неофициальный патч, позволяющий блокировать работу эксплоита. Дополнительно опубликован видеоролик с детальной демонстрацией работы эксплоита. Следует заметить, что код с правами root запускается после создания chroot, что ограничивает его работу директорией пользователя.

Дополнение: Сообщается об обнаружении похожей проблемы в ftp-сервере vsftpd, но уязвимость больше носит теоретический характер, так как чрезвычайно сложно эксплуатируема, требует нереальных условий (наличие в системе версии glibc с уязвимостью, исправленной ещё в 2009 году) и в конечном итоге может привести лишь к выполнению кода с правами непривилегированного пользователя, что практически исключает выход за пределы chroot (для повышения привилегий из chroot можно дополнительно эксплуатировать локальную уязвимость в ядре). Проблема присутствует не в самом vsftpd, а в glibc. В случае с vsftpd в каталог "~/usr/share/zoneinfo" помещаются специально оформленные файлы временных зон, которые эксплуатируют переполнение буфера в старых версиях библиотеки glibc, которая пытается загрузить данные файлы из иерархии chroot при выполнении определённых FTP-команд.

Источник: http://www.opennet.ru/opennews/art.shtml?num=32450