
Exploit para CVE-2023-33246 direcionado ao Apache RocketMQ 5.1.0, permitindo execução remota de código por meio de injeção de pacotes maliciosos no endpoint de atualização de configuração do broker.
[![Build Status][maven-build-image]][maven-build-url] [![CodeCov][codecov-image]][codecov-url] [![Maven Central][maven-central-image]][maven-central-url] [![Release][release-image]][release-url] [![License][license-image]][license-url] [![Average Time to Resolve An Issue][percentage-of-issues-still-open-image]][pencentage-of-issues-still-open-url] [![Percentage of Issues Still Open][average-time-to-resolve-an-issue-image]][average-time-to-resolve-an-issue-url] [![Twitter Follow][twitter-follow-image]][twitter-follow-url]
Apache RocketMQ é uma plataforma distribuída de mensageria e streaming com baixa latência, alto desempenho e confiabilidade, capacidade em nível de trilhões e escalabilidade flexível.
Ele oferece uma variedade de recursos:
Este parágrafo orienta você pelas etapas de instalação do RocketMQ de diferentes maneiras. Para desenvolvimento e testes locais, apenas uma instância será criada para cada componente.
O RocketMQ executa em todos os principais sistemas operacionais e requer apenas um Java JDK versão 8 ou superior instalado.
Para verificar, execute java -version:
$ java -version
java version "1.8.0_121"
Para usuários Windows, clique aqui para baixar a versão binária 4.9.4 do RocketMQ,
descompacte-a em seu disco local, como D:\rocketmq.
Para usuários de macOS e Linux, execute os seguintes comandos:
# Download release from the Apache mirror
$ wget https://archive.apache.org/dist/rocketmq/4.9.4/rocketmq-all-4.9.4-bin-release.zip
# Unpack the release
$ unzip rocketmq-all-4.9.4-bin-release.zip
Prepare um terminal e acesse o diretório bin extraído:
$ cd rocketmq-4.9.4/bin
1) Iniciar o NameServer
O NameServer ficará escutando em 0.0.0.0:9876; certifique-se de que a porta não esteja sendo usada por outros na máquina local e, em seguida, faça o seguinte.
Para usuários de macOS e Linux:
### start Name Server
$ nohup sh mqnamesrv &
### check whether Name Server is successfully started
$ tail -f ~/logs/rocketmqlogs/namesrv.log
The Name Server boot success...
Para usuários Windows, você precisa definir as variáveis de ambiente primeiro:
ROCKETMQ_HOME="D:\rocketmq".Em seguida, mude para o diretório do rocketmq, digite e execute:
$ mqnamesrv.cmd
The Name Server boot success...
2) Iniciar o Broker
Para usuários de macOS e Linux:
### start Broker
$ nohup sh bin/mqbroker -n localhost:9876 &
### check whether Broker is successfully started, eg: Broker's IP is 192.168.1.2, Broker's name is broker-a
$ tail -f ~/logs/rocketmqlogs/broker.log
The broker[broker-a, 192.169.1.2:10911] boot success...
Para usuários Windows:
$ mqbroker.cmd -n localhost:9876
The broker[broker-a, 192.169.1.2:10911] boot success...
Você pode executar o RocketMQ em sua própria máquina usando contêineres Docker;
a rede host será usada para expor a porta de escuta no contêiner.
1) Iniciar o NameServer
$ docker run -it --net=host apache/rocketmq ./mqnamesrv
2) Iniciar o Broker
$ docker run -it --net=host --mount source=/tmp/store,target=/home/rocketmq/store apache/rocketmq ./mqbroker -n localhost:9876
Você também pode executar um cluster RocketMQ em um cluster Kubernetes usando o RocketMQ Operator.
Antes de suas operações, certifique-se de que o kubectl e o arquivo kubeconfig correspondente estejam instalados em sua máquina.
1) Instalar CRDs
### install CRDs
$ git clone https://github.com/apache/rocketmq-operator
$ cd rocketmq-operator && make deploy
### check whether CRDs is successfully installed
$ kubectl get crd | grep rocketmq.apache.org
brokers.rocketmq.apache.org 2022-05-12T09:23:18Z
consoles.rocketmq.apache.org 2022-05-12T09:23:19Z
nameservices.rocketmq.apache.org 2022-05-12T09:23:18Z
topictransfers.rocketmq.apache.org 2022-05-12T09:23:19Z
### check whether operator is running
$ kubectl get pods | grep rocketmq-operator
rocketmq-operator-6f65c77c49-8hwmj 1/1 Running 0 93s
2) Criar a instância do cluster
### create RocketMQ cluster resource
$ cd example && kubectl create -f rocketmq_v1alpha1_rocketmq_cluster.yaml
### check whether cluster resources is running
$ kubectl get sts
NAME READY AGE
broker-0-master 1/1 107m
broker-0-replica-1 1/1 107m
name-service 1/1 107m