
Exploração para Apache RocketMQ RCE (CVE-2023-33246) que executa comandos arbitrários via função de atualização de configuração, com configuração de ambiente e exemplos de uso.
Apache RocketMQ é uma das plataformas de mensagens e streaming distribuídas mais populares e amplamente utilizadas. Uma vulnerabilidade de execução de comandos foi recentemente relatada no Apache RocketMQ afetando a versão 5.1.0 e anteriores. Um usuário remoto não autenticado pode explorar esta vulnerabilidade usando a função de atualização de configuração para executar comandos com o mesmo nível de acesso do processo do usuário RocketMQ.
O nameserver no RocketMQ atua como um registro ou armazenamento de metadados para toda a infraestrutura de mensagens.
Ele mantém informações sobre tópicos, filas e os brokers responsáveis pelo tratamento de mensagens.
Os clientes (produtores e consumidores) usam o nameserver para descobrir os brokers com os quais precisam se comunicar para publicar ou consumir mensagens.
O nameserver é responsável pelo roteamento dinâmico, balanceamento de carga e failover dentro do cluster RocketMQ.
Ele escuta em uma porta específica (geralmente a porta 9876 por padrão) para requisições recebidas de clientes e brokers.
Os brokers são os cavalos de batalha do sistema RocketMQ, responsáveis por armazenar e gerenciar mensagens.
Cada broker gerencia um ou mais tópicos, que são canais lógicos para comunicação de mensagens.
Os produtores publicam mensagens em tópicos específicos, e os consumidores se inscrevem em tópicos para receber mensagens.
Os brokers lidam com armazenamento, replicação e entrega de mensagens aos consumidores com base em assinaturas e padrões de consumo de mensagens.
Eles mantêm filas de mensagens para cada partição de tópico, garantindo processamento e entrega eficientes de mensagens.
Os brokers se comunicam com nameservers para se registrar, atualizar metadados e participar dos mecanismos de roteamento e balanceamento de carga do cluster.
Configurar ambiente local RocketMQ via Docker
docker pull apache/rocketmq:4.9.4
### Start nameserver
docker run -d --name rmqnamesrv -p 9876:9876 apache/rocketmq:4.9.4 sh mqnamesrv
### Start 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
Usando a configuração padrão, o cluster Broker é iniciado na porta TCP 9876 para começar a receber mensagens de um cliente. Por exemplo, abaixo está uma comunicação de exemplo entre um cliente e um broker para obter a versão do RocketMQ.
python3 check.py --ip 127.0.0.1 --port 9876

PCAP

A função UpdateBrokerConfig() é acionada quando uma requisição com código '25', que está associado ao RequestCode, é recebida
python3 CVE-2023-33246_RocketMQ_RCE_EXPLOIT.py 127.0.0.1 10911 curl 127.0.0.1/exp

PCAP

Utilizamos a configuração de servidor "rocketmqHome" encontrada no arquivo broker.conf. Essa configuração define o valor da variável de ambiente ROCKETMQ_HOME dentro do processo do usuário RocketMQ. Através de uma manipulação cuidadosa desse valor, podemos executar comandos de nossa escolha.

é assim que essa vulnerabilidade funciona..