背景
tomcat是较为常用的web服务器,近日公司发布了Tomcat中间件漏洞的整改通知,来进行对tomcat的AJP漏洞的补救,下面讲述对于tomcat的两种补救措施。
漏洞详情
国家信息安全漏洞共享平台于2月22日发布了一份关于Apache Tomcat存在文件包含漏洞的安全报告。该漏洞综合评级为“高危”,影响的产品版本包括:Tomcat6、Tomcat7、Tomcat8、Tomcat9。报告中提到Tomcat AJP协议由于存在实现缺陷导致相关参数可控,攻击者利用该漏洞可通过构造特定参数,读取服务器webapp下的任意文件,若服务器端同时存在文件上传功能,攻击者可进一步实现远程代码的执行。
官网修复漏洞版本
官网已经发布修复漏洞的Apache Tomcat版本,版本分别为:Tomcat9.0.31、Tomcat8.5.51、Tomcat7.0.100,大家可以通过Apache Tomcat官网下载相应的版本进行更新。
一、springBoot内置tomcat
首先要确定是否开启了AJP,一般springboot是默认不开启AJP协议的。如果使用的是springboot的内置tomcat,且手动开启了AJP协议,则需要升级内置tomcat版本。
springboot开启AJP方法
@Bean
public WebServerFactory<TomcatServletWebServerFactory> servletWebConnector() {
return server -> {
if (server instanceof TomcatServletWebServerFactory) {
((TomcatServletWebServerFactory) server).addAdditionalTomcatConnectors(redirectConnector());
}
};
}
private Connector redirectWebConnector() {
Connector connector = new Connector("AJP/1.3");
connector.setScheme("http");
connector.setPort(ajpPort);
connector.setSecure(false);
connector.setAllowTrace(false);
return connector;
}
springboot如何升级内置tomcat版本
首先要引入依赖包,然后根据依赖包进行升级
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<artifactId>tomcat-embed-core</artifactId>
<groupId>org.apache.tomcat.embed</groupId>
</exclusion>
<exclusion>
<artifactId>tomcat-embed-el</artifactId>
<groupId>org.apache.tomcat.embed</groupId>
</exclusion>
<exclusion>
<artifactId>tomcat-embed-websocket</artifactId>
<groupId>org.apache.tomcat.embed</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<version>9.0.31</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-el</artifactId>
<version>9.0.31</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
<version>9.0.31</version>
<exclusions>
<exclusion>
<artifactId>tomcat-embed-core</artifactId>
<groupId>org.apache.tomcat.embed</groupId>
</exclusion>
</exclusions>
</dependency>
二、通常tomcat
1、如未使用Tomcat AJP协议:
如未使用Tomcat AJP协议,直接下载对应版本修复漏洞
如有更老版本或者无法立即进行版本更新的用户,建议直接关闭AJPConnector,或将其监听地址改为仅监听本机localhost。具体操作如下:
(1)编辑<CATALINA_BASE>/conf/server.xml,找到如下行(<CATALINA_BASE>为Tomcat的工作目录):
<Connector port=”8009” protocol=”AJP/1.3” redirectPort=”8443/”>
(2)将此行注释(也可删掉改行)
<!--<Connector port=”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” secret=”YOUR_TOMCAT_AJP_SECRET”>