1 漏洞描述
CVE-2020-1938 是 Apache Tomcat 中的一个严重安全漏洞,该漏洞涉及到 Tomcat 的 AJP(Apache JServ Protocol)连接器。由于 AJP 协议在处理请求时存在缺陷,攻击者可以利用此漏洞读取服务器上的任意文件,甚至可能进一步实现远程代码执行。
2 漏洞原理
Tomcat 的默认配置中,conf/server.xml
文件配置了两个 Connector:一个用于处理 HTTP 协议的请求(通常为 8080 端口),另一个用于处理 AJP 协议的请求(默认为 8009 端口)。这两个端口默认都监听在外网 IP 上。
当 Tomcat 接收 AJP 请求时,会调用 org.apache.coyote.ajp.AjpProcessor
来处理 AJP 消息。在 prepareRequest
方法中,Tomcat 会从 AJP 请求中提取内容,并将其设置为请求对象的 Attribute 属性。然而,由于 AJP 协议在处理请求时存在缺陷,攻击者可以构造特定的请求参数,导致 Tomcat 错误地将文件路径作为请求参数进行处理,从而读取服务器上的任意文件。
3 漏洞影响
CVE-2020-1938 漏洞影响了 Apache Tomcat 的多个版本,包括但不限于:
-
Apache Tomcat 6
-
Apache Tomcat 7 系列 < 7.0.100
-
Apache Tomcat 8 系列 < 8.5.51
-
Apache Tomcat 9 系列 < 9.0.31
4 vulhub靶场环境搭建
进入目录
cd vulhub/tomcat/CVE-2020-1938
拉去环境
docker compose up -d
查看端口
docker-compose ps
访问 ,您将看到页面,表示环境正在成功运行。
5 漏洞复现
从github上下载POC
https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
直接克隆到kali虚拟机中
git clone https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi.git
执行POC验证漏洞,可以看到复现成功!
python CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.1.20 -p 8009 -f WEB-INF/web.xml
6 漏洞防御
为了防范 CVE-2020-1938 漏洞,你可以采取以下措施:
-
升级 Apache Tomcat 至不受影响的版本。这是最直接、最有效的防御措施。
-
如果无法立即升级 Tomcat,请确保 AJP 连接器仅在内网中启用,并限制可访问该端口的 IP 地址范围。
-
定期检查并更新 Tomcat 的安全补丁和配置文件,以确保系统的安全性。
-
加强服务器的访问控制和权限管理,限制对敏感文件和目录的访问权限。
-
部署 Web 应用程序防火墙(WAF)等安全设备,对 AJP 请求进行过滤和检测,防止恶意请求的攻击。