CVE-2020-1938 Tomcat AJP 漏洞记录

漏洞描述

2020年1月6日,国家信息安全漏洞共享平台(CNVD)收录了由北京长亭科技有限公司发现并报送的Apache Tomcat文件包含漏洞(CNVD-2020-10487,对应CVE-2020-1938)。攻击者利用该漏洞,可在未授权的情况下远程读取特定目录下的任意文件。由于Tomcat AJP协议存在实现缺陷导致相关参数可控,攻击者利用该漏洞可通过构造特定参数,读取服务器webapp下的任意文件。若服务器端同时存在文件上传功能,攻击者可进一步实现远程代码的执行。

威胁等级

高危

影响范围

Apache Tomcat = 6

7 <= Apache Tomcat < 7.0.100

8 <= Apache Tomcat < 8.5.51

9 <= Apache Tomcat < 9.0.31

v2-d2c2ce2a5508b51ba9f9f5c7fbccbc6a_b.jpg

环境搭建

环境:JAVA、Tomcat

Tomcat下载:github.com/apache/tomca

v2-2c7b43c108be5e4bdb2d6b1d70f6b941_b.jpg

v2-975aff522f0eea9bf3e207954c673972_b.jpg

漏洞分析

参考:

cnvd.org.cn/webinfo/sho

tomcat.apache.org/conne

tomcat.apache.org/tomca

stackoverflow.com/quest


tomcat默认的conf/server.xml中配置了2个Connector(HTTP、AJP),一个为8080的对外提供的HTTP协议端口,另外一个就是默认的8009 AJP协议端口默认情况下,tomcat配置完成后,在conf/server.xml文件中AJP connector服务在8009端口监听。如图:

v2-113d844896042cec3136293fd37e677d_b.jpg


其中我们可以利用DeaultServlet来实现文件读取。 通过serveResource方法来获取资源文件。 然后再通过控制ajp控制的上述三个属性来读取文件。

漏洞复现

备注:在实验复现过程中要注意Tomcat的版本,有些Tomcat版本是默认没有开启AJP的默认端口8009,或者被注释掉了。

下图为java的检测工具复现图:

v2-20fb95e523baa6c9a36bab95c16100d3_b.jpg

下图为python的检测工具复现图:

v2-5379780a37822996c4a8c73c22542787_b.jpg

修复建议

目前,Apache官方已发布9.0.31、8.5.51及7.0.100版本对此漏洞进行修复,建议用户尽快升级新版本或采取临时缓解措施:

1. 如未使用Tomcat AJP协议:

如未使用 Tomcat AJP 协议,可以直接将 Tomcat 升级到 9.0.31、8.5.51或 7.0.100 版本进行漏洞修复。

如无法立即进行版本更新、或者是更老版本的用户,建议直接关闭AJPConnector,或将其监听地址改为仅监听本机localhost。

具体操作:

(1)编辑 <CATALINA_BASE>/conf/server.xml,找到如下行(<CATALINA_BASE> 为 Tomcat 的工作目录):

<Connector port="8009"protocol="AJP/1.3" redirectPort="8443" />

(2)将此行注释掉(也可删掉该行):

<!--<Connectorport="8009" protocol="AJP/1.3"redirectPort="8443" />-->

(3)保存后需重新启动,规则方可生效。


2. 如果使用了Tomcat AJP协议:

建议将Tomcat立即升级到9.0.31、8.5.51或7.0.100版本进行修复,同时为AJP Connector配置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"/>

如无法立即进行版本更新、或者是更老版本的用户,建议为AJPConnector配置requiredSecret来设置AJP协议认证凭证。例如(注意必须将YOUR_TOMCAT_AJP_SECRET更改为一个安全性高、无法被轻易猜解的值):

<Connector port="8009"protocol="AJP/1.3" redirectPort="8443"address="YOUR_TOMCAT_IP_ADDRESS"requiredSecret="YOUR_TOMCAT_AJP_SECRET" />

信息参考:

cnvd.org.cn/webinfo/sho

tomcat.apache.org/conne

tomcat.apache.org/tomca

stackoverflow.com/quest


工具参考:

github.com/0nise/cve-20

https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi/

更多白帽黑客学习资料,请关注破壳学院


版权声明:本文为weixin_43815032原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。