Apache Tomcat文件包括误差剖析
宣布时间 2020-02-21一、误差概述
2020年2月20日,国家信息清静误差共享平台(CNVD)宣布关于Apache Tomcat的清静通告,Apache Tomcat文件包括误差(CNVD-2020-10487,对应CVE-2020-1938)。Tomcat AJP协议由于保存实现缺陷导致相关参数可控,攻击者使用该误差可通过结构特定参数,读取服务器webapp下的恣意文件。若服务器端同时保存文件上传功效,攻击者可进一步实现远程代码的执行。
二、误差剖析
通过对Apache Tomcat源码举行剖析,发明Tomcat在处置惩罚ajp协议时保存误差,可通过挪用request.setAttribute为Tomcat设置恣意request属性,如下图所示:
通太过析复现发明Tomcat ajp协议保存web目录下恣意文件读取误差以及JSP文件包括误差。当ajp URI设置为非jsp路径时,Tomcat会挪用DefaultServlet处置惩罚,此时会导致web目录恣意文件读取误差。当ajp URI设置为jsp路径时,Tomcat会挪用JspServlet处置惩罚,此时会导致JSP文件包括误差。
2.1 Web目录恣意文件读取误差
当ajp URI设置为非jsp路径时,Tomcat会挪用DefaultServlet处置惩罚,我们需要控制如下两个属性:
javax.servlet.include.path_info
javax.servlet.include.servlet_path
其中,javax.servlet.include.servlet_path属性为目今项目路径、javax.servlet.include.path_info属性为目录路径。然后,通过DefaultServlet类的getRelativePath要领举行拼接获得path路径。如下图所示:
最后,会将path带入到getResource(path)要领中造成恣意文件读取。如下图所示:
使用该误差乐成读取到/WEB-INF/目录下web.xml文件。
2.2 Jsp文件包括误差
当ajp URI设置为jsp路径时,Tomcat会挪用JspServlet的service要领处置惩罚,如下图所示:
同样会获取javax.servlet.include.path_info、javax.servlet.include.servlet_path这两个属性(经由上面的剖析我们已经知道可以通过ajp协议控制这两个属性)。将这两个属性对应的值拼接到jspURi变量中,最后交给serviceJspFile要领处置惩罚,如下图所示:
Venus.txt文件代码如下所示:
乐成RCE效果如下图所示:
三、影响版本
Tomcat 6
Tomcat 7
Tomcat 8
Tomcat 9
四、规避计划
将Tomcat连忙升级到9.0.31、8.5.51或7.0.100版本举行修复。
禁用AJP协议。
编辑 /conf/server.xml,找到如下行:
<Connector port="8009"protocol="AJP/1.3" redirectPort="8443" />
将此行注释掉(也可删掉该行):
<!--<Connectorport="8009" protocol="AJP/1.3"redirectPort="8443" />-->
设置secret来设置AJP协议的认证凭证。
例如(注重必需将YOUR_TOMCAT_AJP_SECRET更改为一个清静性高、无法被容易猜解的值):
<Connector port="8009"protocol="AJP/1.3" redirectPort="8443"address="YOUR_TOMCAT_IP_ADDRESS" secret="YOUR_TOMCAT_AJP_SECRET"/>


京公网安备11010802024551号