JBoss 反序列化漏洞原理
在 CVE-2017-7504 的利用中,攻击者通常会利用 Apache Commons Collections 库中的 Gadget Chain。这个库在许多 Java 应用中都非常常见,因此它成为了反序列化漏洞攻击的理想目标
攻击步骤如下:
- 构造恶意对象: 攻击者首先在本地构建一个恶意的 Java 对象,该对象利用 Apache Commons Collections 中的某些类,例如
InvokerTransformer
。这个类可以用来反射调用任意方法,例如java.lang.Runtime.exec()
- 将对象序列化: 攻击者将这个恶意对象序列化成字节流
- 发送恶意请求: 攻击者通过 JBoss Remoting 协议,将这个恶意的字节流发送给存在漏洞的 JBoss 服务器
- 服务器反序列化: JBoss 服务器接收到数据后,会调用
ObjectInputStream.readObject()
方法对其进行反序列化 - 触发 Gadget Chain: 在反序列化的过程中,Java 会按照字节流中的描述,依次还原对象并调用其中的方法。当执行到攻击者预设的
InvokerTransformer
时,它会反射调用java.lang.Runtime.exec()
方法,并执行攻击者指定的命令