报告编号:B6-2020-022101
报告来源:360-CERT
报告作者:Hu3sky
更新日期:2020-02-21
0x01 漏洞背景
2020年02月20日, 360CERT 监测发现 国家信息安全漏洞共享平台(CNVD) 收录了 CNVD-2020-10487
Apache Tomcat文件包含漏洞
Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持。由于Tomcat本身也内含了HTTP服务器,因此也可以视作单独的Web服务器。
CNVD-2020-10487/CVE-2020-1938
是文件包含漏洞,攻击者可利用该漏洞读取或包含 Tomcat
上所有 webapp
目录下的任意文件,如:webapp
配置文件、源代码等。
0x02 影响版本
Apache Tomcat 9.x < 9.0.31
Apache Tomcat 8.x < 8.5.51
Apache Tomcat 7.x < 7.0.100
Apache Tomcat 6.x
0x03 漏洞分析
3.1 AJP Connector
Apache Tomcat
服务器通过Connector
连接器组件与客户程序建立连接,Connector
表示接收请求并返回响应的端点。即Connector
组件负责接收客户的请求,以及把Tomcat服务器的响应结果发送给客户。在Apache Tomcat
服务器中我们平时用的最多的8080
端口,就是所谓的Http Connector
,使用Http(HTTP/1.1)
协议
在conf/server.xml
文件里,他对应的配置为
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
而 AJP Connector
,它使用的是 AJP
协议(Apache Jserv Protocol
)是定向包协议。因为性能原因,使用二进制格式来传输可读性文本,它能降低 HTTP
请求的处理成本,因此主要在需要集群、反向代理的场景被使用。
Ajp
协议对应的配置为
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
Tomcat服务器默认对外网开启该端口
Web
客户访问Tomcat
服务器的两种方式:
3.2 代码分析
漏洞产生的主要位置在处理Ajp
请求内容的地方
org.apache.coyote.ajp.AbstractAjpProcessor.java#prepareRequest()
这里首先判断
SC_A_REQ_ATTRIBUTE
,意思是如果使用的Ajp
属性并不在上述的列表中,那么就进入这个条件
SC_A_REQ_REMOTE_PORT
对应的是AJP_REMOTE_PORT
,这里指的是对远程端口的转发,Ajp13
并没有转发远程端口,但是接受转发的数据作为远程端口。
于是这里我们可以进行对
Ajp
设置特定的属性,封装为request
对象的Attribute
属性
比如以下三个属性可以被设置
javax.servlet.include.request_uri
javax.servlet.include.path_info
javax.servlet.include.servlet_path
3.3 任意文件读取
当请求被分发到
org.apache.catalina.servlets.DefaultServlet#serveResource()
方法
调用
getRelativePath
方法,需要获取到request_uri
不为null
,然后从request
对象中获取并设置pathInfo
属性值和servletPath
属性值
接着往下看到
getResource
方法时,会把path
作为参数传入,获取到文件的源码
漏洞演示:
读取到
/WEB-INF/web.xml
文件
3.4 命令执行
当在处理 jsp
请求的uri
时,会调用
org.apache.jasper.servlet.JspServlet#service()
最后会将
pathinfo
交给serviceJspFile
处理,以jsp
解析该文件,所以当我们可以控制服务器上的jsp文件的时候,比如存在jsp的文件上传,这时,就能够造成rce
漏洞演示:
造成rce
0x04 修复建议
更新到如下Tomcat 版本
Tomcat 分支 | 版本号 |
---|---|
Tomcat 7 | 7.0.0100 |
Tomcat 8 | 8.5.51 |
Tomcat 9 | 9.0.31 |
Apache Tomcat 6 已经停止维护,请升级到最新受支持的 Tomcat 版本以免遭受漏洞影响。
请广大用户时刻关注 Apache Tomcat® - Welcome! 获取最新的 Tomcat Release版本,以及 apache/tomcat: Apache Tomcat 获取最新的 git 版本。
0x05 相关空间测绘数据
360安全大脑-Quake网络空间测绘系统通过对全网资产测绘,发现 Apache Tomcat 在国内存在大范围的使用情况。具体分布如下图所示。
0x06 产品侧解决方案
6.1 360城市级网络安全监测服务
360安全大脑的QUAKE资产测绘平台通过资产测绘技术手段,对该类 漏洞/事件 进行监测,请用户联系相关产品区域负责人获取对应产品。
6.2 360AISA全流量威胁分析系统
360AISA基于360海量安全大数据和实战经验训练的模型,进行全流量威胁检测,实现实时精准攻击告警,还原攻击链。 目前产品具备该漏洞/攻击的实时检测能力。
0x07 时间线
2020-02-21 360-CERT 发布分析报告