CVE-2023-46604
Apache ActiveMQ
2023-11-02
Apache ActiveMQ contains a deserialization of untrusted data vulnerability that may allow a remote attacker with network access to a broker to run shell commands by manipulating serialized class types in the OpenWire protocol to cause the broker to instantiate any class on the classpath.
Технический анализ и план устранения
Суть уязвимости
CVE-2023-46604 — это критическая уязвимость (CVSS 10.0), связанная с небезопасной десериализацией данных в протоколе OpenWire. Проблема заключается в том, что брокер Apache ActiveMQ некорректно проверяет типы данных при обработке пакетов OpenWire.
Дистанционный злоумышленник может отправить специально сформированный сетевой пакет, который заставит брокер создать экземпляр любого класса, доступного в classpath. В частности, использование класса org.springframework.context.support.ClassPathXmlApplicationContext позволяет загрузить произвольный XML-конфиг с удаленного сервера, что приводит к выполнению произвольного кода (RCE) с правами пользователя, под которым запущен ActiveMQ.
Как исправить
Основным и рекомендуемым способом устранения является обновление Apache ActiveMQ до версий, в которых реализована строгая проверка типов для протокола OpenWire.
- Определите текущую версию брокера.
- Обновите Apache ActiveMQ до одной из следующих версий (или более новых):
- 5.15.16
- 5.16.7
- 5.17.6
- 5.18.3
-
6.0.0
-
Если вы используете Legacy-версии (например, 5.11.x), необходимо перейти на одну из поддерживаемых веток, указанных выше.
-
После обновления бинарных файлов перезапустите службу:
systemctl restart activemq
- Если вы используете клиентские библиотеки ActiveMQ в своих Java-приложениях, обновите зависимость
activemq-clientвpom.xmlилиbuild.gradleдо исправленных версий, чтобы предотвратить атаку на стороне клиента.
Временные меры
Если немедленное обновление невозможно, примените следующие меры для снижения риска:
- Ограничение сетевого доступа: Настройте Firewall (iptables/nftables), чтобы разрешить доступ к порту OpenWire (по умолчанию 61616) только доверенным IP-адресам (серверам приложений).
iptables -A INPUT -p tcp --dport 61616 -s <TRUSTED_IP> -j ACCEPT
iptables -A INPUT -p tcp --dport 61616 -j DROP
- Отключение неиспользуемых протоколов:
Если вы не используете OpenWire, отключите его в конфигурационном файле
conf/activemq.xml, закомментировав соответствующийtransportConnector.
<!-- <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?..."/> -->
-
Использование Java Security Manager: Настройте политику безопасности Java, чтобы ограничить возможность выполнения системных команд и сетевых соединений для процесса ActiveMQ, однако это требует тщательного тестирования конфигурации.
-
Мониторинг подозрительной активности: Настройте алерты на появление в логах ошибок, связанных с
ClassPathXmlApplicationContext, и отслеживайте запуск дочерних процессов (например,curl,wget,sh) процессомjava, относящимся к ActiveMQ.