一客户在阿里云上,采用Apache+Tomcat集群布署华丹快速开发平台

最近,阿里云应急响应中心监测到CNVD披露 Apache Tomcat 服务器存在文件读取与包含高危漏洞。

漏洞描述:

Apache Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器。默认情况下,Apache Tomcat会开启AJP连接器,方便与其他Web服务器通过AJP协议进行交互。但Apache Tomcat在AJP协议的实现上存在漏洞,导致攻击者可以通过发送恶意的AJP请求,可以读取或者包含Web应用根目录下的任意文件,如果存在文件上传功能,将可以导致任意代码执行。漏洞利用AJP服务端口实现攻击,未开启AJP服务对外不受漏洞影响(tomcat默认将AJP服务开启并绑定至0.0.0.0)。阿里云应急响应中心提醒 Apache Tomcat用户尽快排查AJP端口对外情况并采取安全措施阻止漏洞攻击。

影响版本

Apache Tomcat 6

Apache Tomcat 7 < 7.0.100

Apache Tomcat 8 < 8.5.51

Apache Tomcat 9 < 9.0.31

安全版本

Apache Tomcat 7.0.100

Apache Tomcat 8.5.51

Apache Tomcat 9.0.31

安全建议

以下任意一种方法均可实现漏洞修复

1、升级至安全版本

2、关闭AJP连接器,修改Tomcat的service.xml,注释掉 <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />。或者禁止Tomcat 的 AJP端口对公网开放。

3、针对阿里云用户,可使用安全组临时禁止AJP服务端口(常见为8009端口)对外,阻止漏洞攻击。

因为需要AJP与apache进行交互,所以不能采用2、3方案修复。那么只能升级Tomcat从当前版本8.5.26升级到安全版本8.5.63。

升级配置与原来完全相同,但启动TOMCAT报错,错误信息如下:

org.apache.catalina.core.StandardService.startInternal Failed to start connector [Connector[AJP/1.3-8009]]

org.apache.catalina.LifecycleException: 协议处理器启动失败

......

Caused by:

java.lang.IllegalArgumentException: AJP连接器配置secretRequired="true",但是属性secret确实空或者空字符串,这样的组合是无效的。

at org.apache.coyote.ajp.AbstractAjpProtocol.start(AbstractAjpProtocol.java:274)

at org.apache.catalina.connector.Connector.startInternal(Connector.java:1100)

...12 more

解决方案也很简单,打开server.xml,在connector段中设置 AJP 协议的认证凭证,即添加secret="TOMCAT_AJP_SECRET6567"即可,注意secrect的值任意,设为一个安全性高、无法被轻易猜解的值。

形如:

<connector

protocol="org.apache.coyote.ajp.AjpNioProtocol"

address="::1"

port="8009"

redirectport="8443"

maxthreads="1200"

uriencoding="UTF-8"

acceptcount="300"

maxpostsize="-1"

connectiontimeout="30000"

minsparethreads="25"

tcpnodelay="ture"

enablelookups="fales"

allowtrace="false"

secret="TOMCAT_AJP_SECRET6567"

/>