CVE-2023-33246
Apache RocketMQ
2023-09-06
Several components of Apache RocketMQ, including NameServer, Broker, and Controller, are exposed to the extranet and lack permission verification. An attacker can exploit this vulnerability by using the update configuration function to execute commands as the system users that RocketMQ is running as or achieve the same effect by forging the RocketMQ protocol content.
Технический анализ и план устранения
Суть уязвимости
CVE-2023-33246 — это критическая уязвимость (CVSS 9.8), связанная с недостаточной проверкой прав доступа и отсутствием аутентификации в компонентах Apache RocketMQ (NameServer, Broker, Controller).
Проблема заключается в том, что функции управления конфигурацией доступны через сетевой протокол RocketMQ без надлежащей верификации отправителя. Злоумышленник может отправить специально сформированный пакет для обновления конфигурации (например, через параметр rocketmqHome), что позволяет внедрить системные команды. В результате происходит удаленное выполнение произвольного кода (RCE) с правами пользователя, от имени которого запущен сервис RocketMQ.
Как исправить
Основным способом устранения уязвимости является обновление компонентов Apache RocketMQ до версий, в которых реализованы необходимые проверки безопасности.
- Обновите NameServer, Broker и Controller до версии 5.1.1 или выше.
- Если вы используете ветку 4.x, обновите компоненты до версии 4.9.6 или выше.
Процесс обновления:
- Скачайте актуальную версию с официального сайта Apache.
- Замените исполняемые файлы и библиотеки.
- Перезапустите сервисы.
Проверка текущей версии (пример для Broker):
mqbroker -v
Временные меры
Если немедленное обновление невозможно, необходимо реализовать комплекс мер по ограничению доступа и усилению защиты:
- Настройка аутентификации (ACL):
Включите и настройте Access Control List (ACL), чтобы требовать подпись и проверку прав для всех запросов. В файле
broker.confустановите:
aclEnable=true
- Сетевая изоляция: Закройте доступ к портам RocketMQ (по умолчанию 9876, 10909, 10911, 10912) из внешних сетей. Используйте Firewall (iptables/nftables) или Security Groups в облаке, чтобы разрешить подключения только с доверенных IP-адресов (IP-white-listing).
Пример ограничения доступа через iptables:
iptables -A INPUT -p tcp --dport 9876 -s <TRUSTED_IP> -j ACCEPT
iptables -A INPUT -p tcp --dport 9876 -j DROP
-
Запуск от имени не привилегированного пользователя: Убедитесь, что процессы RocketMQ запущены от имени специально созданного системного пользователя с минимальными правами, а не от имени root.
-
Проверка конфигурационных файлов: Проверьте файлы конфигурации на наличие подозрительных записей в параметрах, таких как
rocketmqHome, и убедитесь, что права на запись в эти файлы ограничены.