Apache Tomcat文件包含漏洞(CNVD-2020-10487,对应CVE-2020-1938)处理方法

查看Tomcat版本

Tomcat 9.0.31、8.5.51及7.0.100以上版本已经修复此漏洞

#查看Tomcat版本
[root@idp ~]# /usr/sbin/tomcat version
Server version: Apache Tomcat/7.0.76  # Tomcat版本号
Server built:   Mar 12 2019 10:11:36 UTC
Server number:  7.0.76.0
OS Name:        Linux
OS Version:     3.10.0-957.el7.x86_64
Architecture:   amd64
JVM Version:    1.8.0_201-b09
JVM Vendor:     Oracle Corporation

防火墙配置(采用ova配置和手动配置方法,防火墙上默认未开启8009端口)

确认机器防火墙是否已开启8009端口,如果已经开启,请把8009端口关闭

#查看防火墙开启服务和端口情况
[root@idp ~]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160
  sources: 
  services: ssh dhcpv6-client https http
  ports: 8443/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
#在ports里面没有8009则表示没有开启
#如果ports里面有8009话,执行以下命令将8009关闭
[root@www ~]# firewall-cmd --remove-port=8009/tcp --permanent
[root@www ~]# firewall-cmd --reload

防火墙上关闭8009后,理论上此漏洞是无法被利用,但为了安全起见,建议在tomcat中再做如下配置。

Tomcat和Apache配置(Tomcat 9.0.31、8.5.51及7.0.100以下版本

为AJPConnector配置address和requiredSecret来设置AJP协议认证凭证。

[root@www ~]# vi /etc/tomcat/server.xml
#将后面的配置中的<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />注释掉,如果已经注释请忽略
<!-- <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> -->

#找到
<Connector port="8009" address="127.0.0.1"
              enableLookups="false" redirectPort="443" protocol="AJP/1.3"
              tomcatAuthentication="false"/>
#替换成
<Connector port="8009" address="127.0.0.1"
              enableLookups="false" redirectPort="443" protocol="AJP/1.3"
              tomcatAuthentication="false" requiredSecret="replaceyoursecret"/>
#将replaceyoursecret替换成一个安全性高、无法被轻易猜解的值

[root@www ~]# vi /etc/httpd/conf.d/idp.conf
#找到
ProxyPass /idp ajp://localhost:8009/idp retry=5 
#替换成
ProxyPass /idp ajp://localhost:8009/idp secret=replaceyoursecret retry=5 
#将replaceyoursecret替换成刚刚设定的值

#如果存在idp8443.conf,也可以把idp8443.conf删除
[root@www ~]# vi /etc/httpd/conf.d/idp8443.conf
#找到
ProxyPass /idp ajp://localhost:8009/idp retry=5 
#替换成
ProxyPass /idp ajp://localhost:8009/idp secret=replaceyoursecret retry=5 
#将replaceyoursecret替换成刚刚设定的值

#完成后重启服务
[root@www ~]# systemctl restart httpd
[root@www ~]# systemctl restart tomcat

重启tomcat之后再测试一下idp服务是否正常。

注意:/etc/tomcat/server.xml中的requiredSecret和/etc/httpd/conf.d/idp.conf和/etc/httpd/conf.d/idp8443.conf中的secret请保持一致,前者有引号,后两者不需要引号。

漏洞详细情况

安全公告编号:CNTA-2020-0004

2020年1月6日,国家信息安全漏洞共享平台(CNVD)收录了由北京长亭科技有限公司发现并报送的Apache Tomcat文件包含漏洞(CNVD-2020-10487,对应CVE-2020-1938)。攻击者利用该漏洞,可在未授权的情况下远程读取特定目录下的任意文件。目前,漏洞细节尚未公开,厂商已发布新版本完成漏洞修复。

一、漏洞情况分析

Tomcat是Apache软件基金会Jakarta 项目中的一个核心项目,作为目前比较流行的Web应用服务器,深受Java爱好者的喜爱,并得到了部分软件开发商的认可。Tomcat服务器是一个免费的开放源代码的Web应用服务器,被普遍使用在轻量级Web应用服务的构架中。

2020年1月6日,国家信息安全漏洞共享平台(CNVD)收录了由北京长亭科技有限公司发现并报送的Apache Tomcat文件包含漏洞。Tomcat AJP协议由于存在实现缺陷导致相关参数可控,攻击者利用该漏洞可通过构造特定参数,读取服务器webapp下的任意文件。若服务器端同时存在文件上传功能,攻击者可进一步实现远程代码的执行。

CNVD对该漏洞的综合评级为“高危”。

二、漏洞影响范围

漏洞影响的产品版本包括:

Tomcat 6

Tomcat 7

Tomcat 8

Tomcat 9

CNVD平台对Apache Tomcat AJP协议在我国境内的分布情况进行统计,结果显示我国境内的IP数量约为55.5万,通过技术检测发现我国境内共有43197台服务器受此漏洞影响,影响比例约为7.8%。

三、漏洞处置建议

目前,Apache官方已发布9.0.31、8.5.51及7.0.100版本对此漏洞进行修复,CNVD建议用户尽快升级新版本或采取临时缓解措施:

1.   如未使用Tomcat AJP协议:

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

如无法立即进行版本更新、或者是更老版本的用户,建议直接关闭AJPConnector,或将其监听地址改为仅监听本机localhost。

具体操作:

(1)编辑 <CATALINA_BASE>/conf/server.xml,找到如下行(<CATALINA_BASE> 为 Tomcat 的工作目录):

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

(2)将此行注释掉(也可删掉该行):

<!--<Connectorport="8009" protocol="AJP/1.3"redirectPort="8443" />-->

(3)保存后需重新启动,规则方可生效。

2.   如果使用了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"/>

如无法立即进行版本更新、或者是更老版本的用户,建议为AJPConnector配置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" />