Tomcat 9.0 版本如何禁用 AJP 协议防止幽灵猫漏洞攻击?

文章导读
对于大多数不依赖 Apache httpd 等前端服务器反向代理的 Tomcat 9.0 实例,直接在 conf/server.xml 中注释掉 AJP Connector 配置是防止幽灵猫漏洞最彻底的方案。
📋 目录
  1. A 快速处理思路
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
  6. F 参考来源
A A

对于大多数不依赖 Apache httpd 等前端服务器反向代理的 Tomcat 9.0 实例,直接在 conf/server.xml 中注释掉 AJP Connector 配置是防止幽灵猫漏洞最彻底的方案。

先说结论:除非明确使用了 mod_jk 或 mod_proxy_ajp 对接前端 Web 服务器,否则建议直接禁用 AJP 协议以消除风险。

  • 先判断:确认业务架构中是否有 Apache httpd 等通过 AJP 协议反向代理到 Tomcat。
  • 优先做:修改 conf/server.xml 文件,注释或删除 AJP Connector 配置行。
  • 再验证:重启服务后检查 8009 端口是否停止监听,并确认业务正常。

快速处理思路

修改配置文件比升级版本更直接,但操作前务必备份。如果无法立即重启,升级补丁版本也是官方推荐方案,但禁用协议能从根本上关闭攻击面。

操作路径通常为 Tomcat 安装目录下的 conf/server.xml。

为什么会这样

AJP(Apache JServ Protocol)原本设计用于 Tomcat 与前端 Web 服务器(如 Apache httpd)之间的高效通信。幽灵猫漏洞(CVE-2020-1938)的核心在于,旧版本 Tomcat 的 AJP 连接器默认配置可能存在鉴权缺失,且监听在所有网络接口上。

攻击者可以通过构造特定的 AJP 请求,欺骗 Tomcat 读取任意文件(包括 WEB-INF 下的 class 文件或配置文件),甚至在某些条件下包含上传的文件导致代码执行。禁用该协议意味着关闭了这个通信通道,攻击者无法再通过此路径发起请求。

分步处理

  1. 备份配置文件

    在修改前,务必复制一份原始文件,以便出错时回滚。

    cp conf/server.xml conf/server.xml.bak
  2. 定位 AJP 配置

    打开 conf/server.xml,查找包含 protocol="AJP/1.3" 的行。默认配置通常如下:

    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
  3. 禁用连接器

    在该行前后添加 XML 注释符号,使其失效。

    Tomcat 9.0 版本如何禁用 AJP 协议防止幽灵猫漏洞攻击?
    <!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->

    或者直接将 requiredSecret 设置为复杂字符串并限制 address 为 127.0.0.1,但直接禁用更稳妥。

  4. 重启 Tomcat

    配置修改后需要重启服务才能生效。

    bin/shutdown.sh
    bin/startup.sh

怎么验证是否生效

主要通过检查端口监听状态和日志来确认。

  • 检查端口

    使用 netstat 或 ss 命令查看 8009 端口是否还在监听。

    ss -tlnp | grep 8009

    如果没有输出,说明 AJP 端口已关闭。

  • 查看日志

    观察 logs/catalina.out 或 logs/localhost.log,确认启动过程中没有加载 AJP 相关的报错,且服务正常启动。

  • 漏洞扫描

    使用安全的漏洞扫描工具对目标端口进行检测,确认无法通过 AJP 协议建立连接。

常见坑

  • 误删导致业务中断

    如果架构中确实使用了 Apache httpd + mod_jk 方案,禁用 AJP 会导致前端无法转发动态请求。修改前必须确认架构依赖。

  • 修改后未重启

    Tomcat 配置文件修改后不会热加载,必须重启进程。

  • 默认 Secret 为空

    如果必须保留 AJP 协议,务必在 Connector 配置中设置 requiredSecret 属性,并将 address 绑定为 127.0.0.1,避免暴露在公网。

  • 版本混淆

    Tomcat 8.5 和 7.0 也存在该漏洞,修复逻辑类似,但版本号不同,请根据实际安装版本操作。

参考来源

  • Apache Tomcat Official Security Advisories - Tomcat 9.0.x, https://tomcat.apache.org/security-9.html
  • NIST National Vulnerability Database - CVE-2020-1938, https://nvd.nist.gov/vuln/detail/CVE-2020-1938