漏洞分析
漏洞原理
这是经典的JBoss反序列化漏洞,JBoss在/invoker/JMXInvokerServlet请求中读取了用户传入的对象,然后我们利用Apache Commons Collections中的Gadget执行任意代码。
修复建议
更新Apache Commons Collections库 lib地址:https://github.com/ikkisoft/SerialKiller
下载这个jar后放置于classpath,将应用代码中的java.io.ObjectInputStream替换为SerialKiller
之后配置让其能够允许或禁用一些存在问题的类,SerialKiller有Hot-Reload,Whitelisting,Blacklisting几个特性,控制了外部输入反序列化后的可信类型。
影响范围
JBoss Enterprise Application Platform 6.4.4,5.2.0,4.3.0_CP10
JBoss AS (Wildly) 6 and earlier
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
环境搭建
https://github.com/vulhub/vulhub/tree/master/jboss/JMXInvokerServlet-deserialization
初始化完成后访问http://your-ip:8080/
即可看到JBoss默认页面。
复现
方法1
利用集成工具,一键getshell
https://cdn.vulhub.org/deserialization/DeserializeExploit.jar
方法2
借助ysoserial,来生成payload,发送到/invoker/readonly,可参考
https://github.com/vulhub/vulhub/tree/master/jboss/CVE-2017-12149