Tomcat 被爆漏洞,部署在阿里云上的应用该怎么办?

最近很多同学都听说了 Tomcat 的关于 AJP 的漏洞,国家信息安全漏洞共享平台(CNVD) 也对此进行披露,同时该漏洞综合评级被评为“高危”,这篇文章主要用来描述,如果确认您部署在阿里云上的应用受到了影响,该如何处理。

漏洞编号:CNVD-2020-10487/CVE-2020-1938

第一种方式:直接升级 Tomcat 版本

根据官方描述,最好的方式是将 Tomcat 升级到最新版本:Tomcat7 升至 7.0.100、Tomcat8 升至 8.5.51、Tomcat 9 升至 9.0.31。

这种方式最为彻底,但是缺点也很显而易见:由于这种做法属于更换底层的基础设施,如果您是生产应用,建议将风险控制在可控范围之内再进行。

第二种方式:修改配置

由于此漏洞只会对于 AJP 协议的 Connector 有影响,默认情况下 AJP 协议是打开的,但是 AJP 必须结合 httpd 一起工作才能起作用,如果您的应用中没有使用到 httpd,是可以关闭的,关闭的方式为:

  1. 打开配置文件 conf/server.xml: vim ${CATALINA_HOME}/conf/server.xml
  2. 找到 <Connector port="8009" protocol="AJP/1.3" 后,注销配置文件中的相关配置,保存退出。
  3. 重启应用

如果您的应用中确实使用到了 AJP 协议的话,建议您在 Connector 的配置中,加入 secret 和 secretRequired 配置项,与此同时,需要配合修改前面的 httpd 的配置;具体操作方式可搜索 httpd 和 Tomcat AJP 的配置进行修改。

这种方式,不需要升级 Tomcat 版本,但需要对我们的 Tomcat 和 httpd (如果使用到了)的配置都进行修改;同时,如果集群很大的话,修改系统级别的配置会带来不确定的风险,建议结合一些运维工具批量进行。

第三种方式,关闭不必要的端口暴露

如果不幸端口确实打开了,而又不便去修改机器上的配置时;我们可以通过使用阿里云安全组策略,添加禁用ECS 上 对 8009(默认) 的端口访问的规则,或只对部分授信的 IP 放行来达到目的。

这种方式可以快速的封堵此漏洞,且不需要动机器上的配置,只需要对 ECS 有权限的运维同学就能完成操作,避免了不必要的业务回归。但是 ECS 安全组规则具有很高的维护成本,久而久之如果管理不好的话,可能会带来额外的排查诊断的的成本。

部署在阿里云 EDAS/SAE 上的应用如何操作

漏洞出来之后,EDAS/SAE 团队第一时间审查了我们所提供的 Tomcat 版本,包括 EDAS/SAE Container 和社区版本的 Apache Tomcat,针对 ECS 集群和 Kubernetes 集群我们得出的结论和建议是:

  1. 如果您使用的是 FatJar 的方式部署的话,将不会收到任何影响。
  2. 如果您使用的是 War 包部署的话,请参见一下表格:

应用类型 ECS 集群 Kubernetes 集群没有绑定8009端口暴露 Kubernetes 集群已有绑定8009端口暴露
EDAS/SAE Container(HSF) 应用 不受影响 不受影响 不受影响
Spring Cloud 应用 不受影响 不受影响 需重新部署应用
Dubbo 应用 不受影响 不受影响 需重新部署应用
镜像部署 N/A 不受影响 在镜像中按第一或第二种方式修复后,重做镜像部署应用


上一篇:佳格天地首席科学家宋宽:参赛倒逼出了技术和产品的真正成熟


下一篇:阿里云王牌架构师杨曦:N多环境N多应用个性配置管理如何从混乱到简单?