[漏洞描述]
Apache Tomcat文件包含漏洞(CNNVD-202002-1052、CVE-2020-1938):利用此漏洞的攻擊者可以讀取 Tomcat所有webapp目錄下的任意文件。該漏洞影響包括Apache Tomcat 9.x、Apache Tomcat 8.x、Apache Tomcat 7.x、Apache Tomcat 6.x等多個版本的Tomcat。
由於該漏洞影響全版本默認配置下的 Tomcat,因部分tomcat版本過於久遠,因此該漏洞影響範圍至少包含下列版本,但不排除其他版本的Tomcat。影響版本如下:
Apache Tomcat9.x < 9.0.31
Apache Tomcat 8.x < 8.5.51
Apache Tomcat 7.x < 7.0.100
Apache Tomcat 6.x
1,xml配置文件中的修復方法:
要正確修復此漏洞,首先需要確定服務器環境中是否有用到 Tomcat AJP
協議:
1、如果確定未使用 Tomcat AJP 協議,則可以直接將 Tomcat 升級到 9.0.31、8.5.51 或 7.0.100 版本進行漏洞修復。
2、對於確定未使用 Tomcat AJP 協議,但無法進行版本更新、或者是更老版本的用戶,可以考慮直接關閉 AJP Connector,或將其監聽地址改爲僅監聽在本機 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)更改完畢後,重啓 Tomcat 即可。
2,springboot對應方法:
如果使用的是外置tomcat,參考公告中的對應方法即可。
如果使用的是springboot的內置tomcat,且手動開啓了AJP協議,則需要升級內置tomcat版本。
如果你的springboot(使用默認內置tomcat)並沒有手動開啓AJP,那麼你可以不升級tomcat內置版本。當然你想升級也可以。
springboot開啓AJP方法
springboot默認關閉
AJP,如果需要開啓,則需要手動配置,以springboot2爲例:
@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> servletContainer() {
return server -> {
if (server instanceof TomcatServletWebServerFactory) {
((TomcatServletWebServerFactory) server).addAdditionalTomcatConnectors(redirectConnector());
}
};
}
private Connector redirectConnector() {
Connector connector = new Connector("AJP/1.3");
connector.setScheme("http");
connector.setPort(ajpPort);
connector.setSecure(false);
connector.setAllowTrace(false);
return connector;
}
開啓了AJP的springboot如何升級內置tomcat版本
如果你的springboot項目開啓了AJP,那麼你需要升級內置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-embed-core,tomcat-embed-el和tomcat-embed-websocket這三個依賴包,實際上應該根據你的具體項目中的依賴來升級版本