缓解 CVE-2020-1938 的措施

缓解 CVE-2020-1938 的措施
  • 操作系统:Ubuntu 服务器 18.04.4 LTS
  • Apache 版本:2.4.29-1 Ubuntu4.12
  • Apache Tomcat:8.5.39-1ubuntu1~18.04.3
  • Apache Mod JK:1:1.2.43-1

首先我阅读了很多Debian/Ubuntu和Redhat的技术文档,理论上如果防火墙开启并且不放行8009端口,那么这个漏洞就可以被缓解。

但是由于我们使用 AJP,我们也更喜欢通过密码启用缓解措施。

我使用相同版本的 apache、tomcat 和 mod_jk 在 Windows 服务器中测试了缓解措施并且有效,但是当我在 Ubuntu 服务器中测试相同的配置时,apache 和 tomcat 之间的通信通过 AJP 并没有发生。

我可能犯了什么错误?

Mod JK中的错误痕迹如下:

[Tue Mar 03 16:11:18.102 2020] [28055:139750426003200] [info] jk_open_socket::jk_connect.c (817): connect to ::1:8009 failed (errno=111)
[Tue Mar 03 16:11:18.102 2020] [28055:139750426003200] [info] ajp_connect_to_endpoint::jk_ajp_common.c (1068): (ajp13_worker) Failed opening socket to (::1:8009) (errno=111)
[Tue Mar 03 16:11:18.102 2020] [28055:139750426003200] [error] ajp_send_request::jk_ajp_common.c (1728): (ajp13_worker) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=111)
[Tue Mar 03 16:11:18.102 2020] [28055:139750426003200] [info] ajp_service::jk_ajp_common.c (2778): (ajp13_worker) sending request to tomcat failed (recoverable), because of error during request sending (attempt=1)
[Tue Mar 03 16:11:18.202 2020] [28055:139750426003200] [info] jk_open_socket::jk_connect.c (817): connect to ::1:8009 failed (errno=111)
[Tue Mar 03 16:11:18.202 2020] [28055:139750426003200] [info] ajp_connect_to_endpoint::jk_ajp_common.c (1068): (ajp13_worker) Failed opening socket to (::1:8009) (errno=111)
[Tue Mar 03 16:11:18.202 2020] [28055:139750426003200] [error] ajp_send_request::jk_ajp_common.c (1728): (ajp13_worker) connecting to backend failed. Tomcat is probably not started or is listening on the wrong port (errno=111)
[Tue Mar 03 16:11:18.202 2020] [28055:139750426003200] [info] ajp_service::jk_ajp_common.c (2778): (ajp13_worker) sending request to tomcat failed (recoverable), because of error during request sending (attempt=2)
[Tue Mar 03 16:11:18.202 2020] [28055:139750426003200] [error] ajp_service::jk_ajp_common.c (2799): (ajp13_worker) connecting to tomcat failed (rc=-3, errors=3, client_errors=0).
[Tue Mar 03 16:11:18.203 2020] [28055:139750426003200] [info] jk_handler::mod_jk.c (2995): Service error=-3 for worker=ajp13_worker

缓解文件:https://access.redhat.com/solutions/4851251

任务简历:

修改server.xml

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

工人.属性

workers.tomcat_home=/usr/share/tomcat8

workers.java_home=/usr/lib/jvm/default-java

ps=/

worker.list=ajp13_worker

worker.ajp13_worker.port=8009
worker.ajp13_worker.host=localhost
worker.ajp13_worker.type=ajp13
#worker.ajp13_worker.secret=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

worker.ajp13_worker.lbfactor=1

worker.loadbalancer.type=lb
worker.loadbalancer.balance_workers=ajp13_worker
#worker.loadbalancer.secret=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

# configure jk-status
#worker.list=jk-status
#worker.jk-status.type=status
#worker.jk-status.read_only=true
# configure jk-manager
#worker.list=jk-manager
#worker.jk-manager.type=status

我感谢您在这个问题上给予我的任何帮助。

答案1

CVE-2020-1938 又名 Ghostcat

描述:使用 Apache JServ 协议 (AJP) 时,信任传入 Apache Tomcat 的连接时必须小心谨慎。Tomcat 将 AJP 连接视为比类似的 HTTP 连接具有更高的信任度。如果攻击者可以利用此类连接,则可能会以令人惊讶的方式利用它们。在 Apache Tomcat 9.0.0.M1 到 9.0.0.30、8.5.0 到 8.5.50 和 7.0.0 到 7.0.99 中,Tomcat 默认启用了 AJP 连接器,该连接器会监听所有配置的 IP 地址。如果不需要,则预计(并在安全指南中建议)应禁用此连接器。此漏洞报告确定了一种机制,该机制允许: - 从 Web 应用程序的任何位置返回任意文件 - 将 Web 应用程序中的任何文件作为 JSP 处理 此外,如果 Web 应用程序允许文件上传并将这些文件存储在 Web 应用程序内(或者攻击者能够通过其他方式控制 Web 应用程序的内容),那么这以及将文件作为 JSP 处理的能力使远程代码执行成为可能。 重要的是要注意,只有当不受信任的用户可访问 AJP 端口时才需要缓解措施。 希望采取纵深防御方法并阻止允许返回任意文件并以 JSP 形式执行的向量的用户可能会升级到 Apache Tomcat 9.0.31、8.5.51 或 7.0.100 或更高版本。 对 9.0.31 中的默认 AJP 连接器配置进行了一些更改,以强化默认配置。 升级到 9.0.31、8.5.51 或 7.0.100 或更高版本的用户可能需要对其配置进行一些小的更改。

国家漏洞数据库 CVE-2020-1938

RedHat 公布 CVE-2020-1938

相关内容