Apache Tomcat 曝文件包含漏洞:攻击者可利用该漏洞读取webapp目录下的任意文件
点击上方蓝色“程序猿DD”,选择“设为星标”
回复“资源”获取独家整理的学习资料!
作者 | oschina
来源 | https://www.anquanke.com/post/id/199448
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.31Apache Tomcat 8.x < 8.5.51Apache Tomcat 7.x < 7.0.100Apache Tomcat 6.x0x03 漏洞分析
3.1 AJP Connector
Apache Tomcat服务器通过Connector连接器组件与客户程序建立连接,Connector表示接收请求并返回响应的端点。即Connector组件负责接收客户的请求,以及把Tomcat服务器的响应结果发送给客户。在Apache Tomcat服务器中我们平时用的最多的8080端口,就是所谓的Http Connector,使用Http(HTTP/1.1)协议
在conf/server.xml文件里,他对应的配置为
Ajp协议对应的配置为
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_urijavax.servlet.include.path_infojavax.servlet.include.servlet_path3.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 版本
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海量安全大数据和实战经验训练的模型,进行全流量威胁检测,实现实时精准攻击告警,还原攻击链。目前产品具备该漏洞/攻击的实时检测能力。
本文通过OpenWrite的Markdown转换工具发布
关注我,回复“加群”加入各种主题讨论群
除了Postman之外,居然还有个Postwoman...实战 | 某小公司项目环境部署演变之路真香 | 有了这个神器,学习 Vim 终于不难了!代码生成器:IDEA 强大的 Live TemplatesSpring Boot 2.1之后如何在启动日志中打印请求路径列表