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.

  1. Определите текущую версию брокера.
  2. Обновите Apache ActiveMQ до одной из следующих версий (или более новых):
  3. 5.15.16
  4. 5.16.7
  5. 5.17.6
  6. 5.18.3
  7. 6.0.0

  8. Если вы используете Legacy-версии (например, 5.11.x), необходимо перейти на одну из поддерживаемых веток, указанных выше.

  9. После обновления бинарных файлов перезапустите службу:

systemctl restart activemq

  1. Если вы используете клиентские библиотеки ActiveMQ в своих Java-приложениях, обновите зависимость activemq-client в pom.xml или build.gradle до исправленных версий, чтобы предотвратить атаку на стороне клиента.

Временные меры

Если немедленное обновление невозможно, примените следующие меры для снижения риска:

  1. Ограничение сетевого доступа: Настройте 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

  1. Отключение неиспользуемых протоколов: Если вы не используете OpenWire, отключите его в конфигурационном файле conf/activemq.xml, закомментировав соответствующий transportConnector.
<!-- <transportConnector name="openwire" uri="tcp://0.0.0.0:61616?..."/> -->

  1. Использование Java Security Manager: Настройте политику безопасности Java, чтобы ограничить возможность выполнения системных команд и сетевых соединений для процесса ActiveMQ, однако это требует тщательного тестирования конфигурации.

  2. Мониторинг подозрительной активности: Настройте алерты на появление в логах ошибок, связанных с ClassPathXmlApplicationContext, и отслеживайте запуск дочерних процессов (например, curl, wget, sh) процессом java, относящимся к ActiveMQ.