
This repo contains all the work surrounding the development of the PoC for CVE-2024-48208, and how a simple OOB(Out-of-bound) read can result in jail escapes as well as broken access control.
Репозиторий содержит всю работу, связанную с разработкой PoC, демонстрирующего, как простое чтение за пределами буфера (OOB) может привести к побегу из изолированной среды (jail escape) и нарушению контроля доступа.
Оригинальное описание CVE следующее:

В PR на GitHub в официальном репозитории подробно описывается, как функция domlsd() в файле ls.c уязвима для чтения за пределами буфера (OOB) из-за непроверенного увеличения базового указателя, что может привести к тому, что указатель будет указывать на буфер за пределами буфера cmd, как видно в строках 1053 и 1054.

При отладке буфера в GDB мы заметили, что чтение за пределами буфера (OOB) приводило пользователя к так называемому replybuf.
При дальнейшем анализе мы обнаружили, что replybuf — это буфер, который заполняется ответом, предоставленным сервером клиенту. replybuf определён в файле ftpd.c, как показано ниже:

Итак, подведём итог:
base указывать на часть replybuf.replybuf содержит ответ, переданный клиенту.В оригинальном PR на GitHub автор CVE не рассмотрел/не продемонстрировал, что произойдёт, если следующее условие в ls.c:1055 вернёт true?

Мы начали размышлять над этим, и оказалось, что если злоумышленник может заставить chdir(base) вернуть true, то функция domlsd() продолжает и перечисляет файлы.
Команда рассмотрела сценарии, описанные в VMsetup.txt, о настройках системных администраторов для ограниченных сред, и решила создать эксплойт, который будет работать следующим образом:
Ограниченный пользователь подключается к уязвимому FTP-серверу и входит в систему со своими учётными данными.
nc <server-ip> <ftp-port>
USER <username>
PASS <password>
Затем пользователь переходит в режим EPSV.
EPSV
Пользователь запоминает возвращённый номер порта, так как ему нужно будет подключиться к нему для чтения результатов листинга.
Теперь пользователь может создать файл-ссылку (в зависимости от смещения в буфере, которое можно легко автоматизировать согласно последнему полученному ответу), указывающую на каталог, из которого он хочет получить список файлов.
Пользователь отправляет вредоносную команду (в зависимости от выбранного смещения).
MLSD -........<more than 4096 to overflow the cmd buffer>
Затем пользователь может установить другое соединение с ранее указанным номером порта, чтобы прочитать листинг.
Мы разработали автоматизированный скрипт эксплойта pure.py, который выполняет те же шаги и основан на других скриптах, разработанных нами в процессе тестирования, которые находятся в каталоге dev_files.
Для воспроизведения уязвимости вы можете следовать пошаговому руководству по настройке виртуальной машины в VMsetup.txt
Чтобы создать Docker-контейнер с уязвимым экземпляром, обратитесь к Dockersetup.txt