漏洞描述
2017年9月14日,国家信息安全漏洞共享平台(CNVD)收录了JBOSS Application Server反序列化命令执行漏洞(CNVD-2017-33724,对应CVE-2017-12149),远程攻击者利用漏洞可在未经任何身份验证的服务器主机上执行任意代码。漏洞细节和验证代码已公开,近期被不法分子利用出现大规模攻击尝试的可能性较大。
JBOSS Application Server是一个基于J2EE的开放源代码的应用服务器。 JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用,2006年,JBoss被Redhat公司收购。
2017年8月30日,厂商Redhat发布了一个JBOSSAS 5.x 的反序列化远程代码执行漏洞通告。该漏洞位于JBoss的HttpInvoker组件中的 ReadOnlyAccessFilter 过滤器中,其doFilter方法在一没有进行任何安全检查和限制的情况下尝试将来自客户端的序列化数据流进行反序列化,导致攻击者可以通过精心设计的序列化数据来执行任意代码。但近期有安全研究者发现JBOSSAS 6.x也受该漏洞影响,攻击者利用该漏洞无需用户验证在系统上执行任意命令,获得服务器的控制权。CNVD对该漏洞的综合评级为“高危”。
漏洞复现过程
1. 漏洞环境搭建
在ubuntu已经下载好的vulhub里启动jboss镜像。借助vulhub启动jboss镜像十分简单,只用一行命令。
Vulhub是一个面向大众的开源漏洞靶场,无需docker知识,简单执行两条命令即可编译、运行一个完整的漏洞靶场镜像。旨在让漏洞复现变得更加简单,让安全研究者更加专注于漏洞原理本身。
# start application
docker-compose up
# 列出在运行容器信息
docker ps
使用如下网址测试漏洞是否存在,若出现500则存在。
2. 攻击环境
2.1 使用可视化界面
下载exp:https://github.com/yunxu1/jboss-_CVE-2017-12149
利用刚才下载好的 EXP 进行漏洞利用,打开图形化工具 jboss 反序列化_CVE-2017-12149.jar
先检测,再执行cmd,可以看到存在漏洞,并且获得服务器控制权执行whoami。
2.2 使用jexboss
下载地址:https://github.com/joaomatosf/jexboss
git clone 项目之后,运行 jexboss.py
注:python环境应当是python2
发现缺少依赖,根据提示,安装所需依赖
依赖安装后,再次运行jexboss脚本。
启动另外一个cmd,使用netcat监听攻击主机在成功攻击漏洞反弹后的端口。应当先监听端口,再输入攻击主机的ip地址和端口号。
可以看到反弹成功,获得漏洞服务器的权限。
3. wireshark 抓包,找攻击载荷
在上述攻击过程前,打开wireshar,并使用ip.addr对抓包进行ip地址过滤
可以看到攻击主机向JBoss服务器中发送有序列化数据的post请求。
查看攻击载荷信息:
漏洞防护
成因:暴露反序列化API或传入点 ,用户可以操作传入数据,并且反序列化的readObject()方法未对用户传入数据进行有效的安全检测,攻击者可以精心构造反序列化对象并执行恶意代码。
建议用户升级到JBOSS AS7。另,不能及时升级的用户,可采取如下临时解决方案:
- 不需要 http-invoker.sar 组件的用户可直接删除此组件。
- 添加如下代码至 http-invoker.sar 下 web.xml 的 security-constraint 标签中:用于对 http invoker 组件进行访问控制。