最近很多同學都聽說了 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,是可以關閉的,關閉的方式為:
- 打開配置檔案 conf/server.xml:
。vim ${CATALINA_HOME}/conf/server.xml
- 找到
後,登出配置檔案中的相關配置,儲存退出。<Connector port="8009" protocol="AJP/1.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 叢集我們得出的結論和建議是:
- 如果您使用的是 FatJar 的方式部署的話,将不會收到任何影響。
- 如果您使用的是 War 包部署的話,請參見一下表格:
應用類型 | ECS 叢集 | Kubernetes 叢集沒有綁定8009端口暴露 | Kubernetes 叢集已有綁定8009端口暴露 |
---|---|---|---|
EDAS/SAE Container(HSF) 應用 | 不受影響 | ||
Spring Cloud 應用 | 需重新部署應用 | ||
Dubbo 應用 | |||
鏡像部署 | N/A | 在鏡像中按第一或第二種方式修複後,重做鏡像部署應用 |
- EDAS K8s 叢集關于 Apache Tomcat AJP 漏洞的解決方案(2020年02月24日)>>
- EDAS K8s 客戶交流釘群:23197114
- SAE 客戶交流釘群:23198618