跳转到内容

OpenClinica 用户手册/TomcatAjp漏洞

来自维基教科书,为开放世界提供开放书籍

2020 年 3 月 3 日,tomcat 的 AJP 连接器中发布了一个漏洞。发现该漏洞的团队将其命名为 ghostcat。Apache-Tomcat 已为该漏洞发布了补丁。此页面的目的是帮助您决定是否应该采取行动,以及如果应该,以什么方式采取行动。

我应该担心吗?

[编辑 | 编辑源代码]

如果您是 OpenClinica 管理员,您应该担心,因为 OpenClinica 在 tomcat 上运行,因此您可能会面临风险。

简短版本

[编辑 | 编辑源代码]

让我们为更技术性的读者简短说明:如果 ajp 被激活并在暴露给互联网的端口上监听,您就会面临风险。如果您属于这种情况:下载并安装最新版本的 tomcat,截至撰写本文时,2020 年 3 月 5 日,7.0.100 https://tomcat.net.cn/download-70.cgi

别急:先告诉我 ajp 是什么

[编辑 | 编辑源代码]

有几种方法可以与 tomcat 通信,或者:连接到 tomcat。因此,这些不同的方法被称为 连接器。您可能知道可以使用 http 和/或 https 在某些端口上进行通信。典型的开箱即用安装允许在端口 8080 上进行 http 通信。但是,也许您已使用证书设置了安全通信,并在端口 8443 上使用 https。此外,您可能有一个为 ajp 开放的端口,ajp 代表 Apache JServ 协议。这主要用于您有单独的 Web 服务器(例如 Apache 或 IIS)时,它执行所有繁重的加密工作并提供静态内容。如果您的情况是这样,请跳过下一段。如果您没有单独的 Web 服务器,请再读一段。

我没有单独的 Web 服务器:我安全吗?

[编辑 | 编辑源代码]

您可能不会“使用”ajp,因为您没有单独的 Web 服务器,但不幸的是,这并不意味着您是安全的。在您的安装中,您可能已激活了 ajp-connector,并且它现在正在监听,默认情况下在端口 8009 上。您可以通过发出以下命令来检查这一点:

netstat -vatn|grep 8009

如果输出类似于

tcp6       0      0 :::8009                 :::*                    LISTEN

那么您就知道 ajp 处于活动状态并正在监听。

或者,您可以在 server.xml 中查找类似以下内容的内容:

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" maxParameterCount="-1" maxPostSize="-1" />

如果您不需要 ajp,您可以安全地将其停用,方法是在 server.xml 中将其注释掉:

<!-- Define an AJP 1.3 Connector on port 8009 
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" maxParameterCount="-1" maxPostSize="-1" />
-->

所以 ajp 正在监听:这意味着我存在风险吗?

[编辑 | 编辑源代码]

如果 ajp 正在监听,那么是的,您确实存在风险,但前提是该端口暴露给外部世界。如果您已设置防火墙以仅允许端口 443 上的 https,以及可能用于维护的某些其他端口,那么您就不存在风险。

ajp 正在监听,我必须将端口暴露给外部

[编辑 | 编辑源代码]

现在,如果由于任何原因您无法停用 ajp,并且无法阻止对该端口 8009(或您定义的任何端口)的通信,那么您必须升级 tomcat。

安装补丁

[编辑 | 编辑源代码]

如果您想修补您的 tomcat 安装,请执行以下操作:可能大多数 OpenClinica 安装使用 tomcat7,因此请访问 https://tomcat.net.cn/download-70.cgi 第一个包含修复程序的版本是 tomcat 7.0.100。该版本包含一个额外的检查,用于使用 ajp-connector,即 secret。您可以在 server.xml 中设置此额外检查,例如:

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" maxParameterCount="-1"
     secretRequired="true" secret="un_deux_trois" />

如果您现在重新启动 tomcat 并尝试请求页面,使用 Apache 结合 ajp,您将获得 403。
很好。因为这也会是攻击者的结果。

要采取的最后一步是将 secret 告知 Apache,以便它可以与 tomcat 通信。
这在 worker.properties 文件中完成:

worker.tomcat7.port=8009
worker.tomcat7.host=localhost
worker.tomcat7.type=ajp13
worker.tomcat7.secret=un_deux_trois

该漏洞由一个中国团队发现,他们发布了一些背景信息。您可以在 https://www.chaitin.cn/en/ghostcat 上了解有关 ghostcat 的更多信息。

可以在 https://tomcat.net.cn/migration-7.html#Tomcat_7.0.x_noteable_changes 上找到 tomcat7 中更改的简短版本。

华夏公益教科书