Apache Tomcat 存在Ajp协议文件读取/包含漏洞(称为Ghostcat),请及时修复

Java 是目前 Web 开发中最主流的编程语言,而 Tomcat 是当前最流行的 Java 中间件服务器之一,从初版发布到现在已经有二十多年历史,在世界范围内广泛使用。

Ghostcat(幽灵猫) 是由我国长亭科技安全研究员发现的存在于 Tomcat 中的安全漏洞,由于 Tomcat AJP 协议设计上存在缺陷,攻击者通过 Tomcat AJP Connector 可以读取或包含 Tomcat 上所有 webapp 目录下的任意文件,例如可以读取 webapp 配置文件或源代码。此外在目标应用有文件上传功能的情况下,配合文件包含的利用还可以达到远程代码执行的危害。漏洞被记录为 【 CVE-2020-1938 】

https://www.chaitin.cn/zh/ghostcat

正如网络威胁情报公司Bad Packets 在周六所说的那样,“针对此漏洞的大规模扫描活动已经开始。请立即修补!”

为什么这个漏洞被称作 Ghostcat(幽灵猫)?

这个漏洞影响全版本默认配置下的 Tomcat(在我们发现此漏洞的时候,确认其影响 Tomcat 9/8/7/6 全版本,而年代过于久远的更早的版本未进行验证),这意味着它在 Tomcat 里已经潜伏了长达十多年的时间。

Tomcat AJP Connector 是什么?

Tomcat Connector 是 Tomcat 与外部连接的通道,它使得 Catalina 能够接收来自外部的请求,传递给对应的 Web 应用程序处理,并返回请求的响应结果。

默认情况下,Tomcat 配置了两个 Connector,它们分别是 HTTP Connector 和 AJP Connector:

HTTP Connector:用于处理 HTTP 协议的请求(HTTP/1.1),默认监听地址为 0.0.0.0:8080

AJP Connector:用于处理 AJP 协议的请求(AJP/1.3),默认监听地址为 0.0.0.0:8009

HTTP Connector 就是用来提供我们经常用到的 HTTP Web 服务。而 AJP Connector,它使用的是 AJP 协议(Apache Jserv Protocol),AJP 协议可以理解为 HTTP 协议的二进制性能优化版本,它能降低 HTTP 请求的处理成本,因此主要在需要集群、反向代理的场景被使用。

Ghostcat 漏洞有哪些危害?

通过 Ghostcat 漏洞,攻击者可以读取 Tomcat所有 webapp目录下的任意文件。

此外如果网站应用提供文件上传的功能,攻击者可以先向服务端上传一个内容含有恶意 JSP 脚本代码的文件(上传的文件本身可以是任意类型的文件,比如图片、纯文本文件等),然后利用 Ghostcat 漏洞进行文件包含,从而达到代码执行的危害。

哪些版本的 Tomcat 受到 Ghostcat 漏洞影响?

Apache Tomcat版本受影响的版本已修复的版本
Apache Tomcat 99.0.30 及以下9.0.31
Apache Tomcat 88.5.50 及以下8.5.51
Apache Tomcat 77.0.99 及以下7.0.100
Apache Tomcat 6所有版本不再提供修复

什么情况下的 Tomcat 可以被 Ghostcat 漏洞利用?

对于处在漏洞影响版本范围内的 Tomcat 而言,若其开启 AJP Connector 且攻击者能够访问 AJP Connector 服务端口的情况下,即存在被 Ghostcat 漏洞利用的风险。

注意 Tomcat AJP Connector 默认配置下即为开启状态,且监听在 0.0.0.0:8009 。

Ghostcat 漏洞该如何修复或缓解?

Tomcat 官方已发布 9.0.31、8.5.51 及 7.0.100 版本针对此漏洞进行修复。

要正确修复此漏洞,首先需要确定您的服务器环境中是否有用到 Tomcat AJP 协议:

  • 如果未使用集群或反向代理,则基本上可以确定没有用到 AJP;
  • 如果使用了集群或反向代理,则需要看集群或反代服务器是否与 Tomcat 服务器 AJP 进行通信

1. 如果未使用 Tomcat AJP 协议:

如果确定未使用 Tomcat AJP 协议,则可以直接将 Tomcat 升级到 9.0.31、8.5.51 或 7.0.100 版本进行漏洞修复。

而对于确定未使用 Tomcat AJP 协议,但无法进行版本更新、或者是更老版本的用户,可以考虑直接关闭 AJP Connector,或将其监听地址改为仅监听在本机 localhost。

具体步骤:

(1)编辑 <CATALINA_BASE>/conf/server.xml,找到如下行(<CATALINA_BASE> 为 Tomcat 的工作目录):<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

(2)将此行注释掉(或直接删掉此行):<!--<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />-->

(3)更改完毕后,重启 Tomcat 即可。

除以上措施外,当然也可以采用防火墙等办法以阻止不可信任的来源访问 Tomcat AJP Connector 端口。

2. 如果使用了 Tomcat AJP 协议:

如果确定服务器环境中使用到了 Tomcat AJP 协议,则建议将 Tomcat 升级到 9.0.31、8.5.51 或 7.0.100 版本,同时为 AJP Connector 配置 secret 来设置 AJP 协议认证凭证。

例如(注意必须将 YOUR_TOMCAT_AJP_SECRET 更改为一个安全性高、无法被轻易猜解的值):<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" address="YOUR_TOMCAT_IP_ADDRESS" secret="YOUR_TOMCAT_AJP_SECRET" />

而对于无法进行版本更新、或者是更老版本的用户,则建议为 AJP Connector 配置 requiredSecret 来设置 AJP 协议认证凭证。例如(注意必须将 YOUR_TOMCAT_AJP_SECRET 更改为一个安全性高、无法被轻易猜解的值):

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" address="YOUR_TOMCAT_IP_ADDRESS" requiredSecret="YOUR_TOMCAT_AJP_SECRET" />

在线检测工具

Chaitin Tech还提供了一个安全评估工具,可以帮助您发现容易受到针对网络上Ghostcat攻击的Tomcat服务器: https://www.chaitin.cn/zh/ghostcat

检测受到Ghostcat攻击的Tomcat服务器长亭科技

此漏洞虽然只影响 Tomcat服务器,但是漏洞的危害实在是太严重了,所以WordPress大学也发文告知。安全无小事,如果您的服务器存在这个漏洞,请务必及时更新系统版本!!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
欢迎关注我们的微信公众号:WPDAXUE

倡萌

一个文科IT宅男,喜欢折腾WordPress和被它折腾 ^_^

暂无评论

发表评论