Spring boot web项目关于Apache Tomcat存在文件包含漏洞(CVE-2020-1938)的整改方法

背景

2020年1月6日,国家信息安全漏洞共享平台(CNVD)收录了由北京长亭科技有限公司发现并报送的Apache Tomcat文件包含漏洞(CNVD-2020-10487,对应CVE-2020-1938)。攻击者利用该漏洞,可在未授权的情况下远程读取特定目录下的任意文件。目前,漏洞细节尚未公开,厂商已发布新版本完成漏洞修复。
Tomcat是Apache软件基金会中的一个重要项目,性能稳定且免费,是目前较为流行的Web应用服务器。由于Tomcat应用范围较广,因此本次通告的漏洞影响范围较大,请相关用户及时采取防护措施修复此漏洞。

具体公告:https://www.cnvd.org.cn/webin…

spring boot web项目对应方法

如果使用的是外置tomcat,参考公告中的对应方法即可。

如果使用的是springboot的内置tomcat,且手动开启了AJP协议,则需要升级内置tomcat版本。

如果你的springboot并没有手动开启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;
}

springboot如何内置tomcat版本方法

spring boot 指定内置tomcat版本的pom如下:
示例升级到8.5.51:

        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
            <exclusions>
                <exclusion>
                    <artifactId>tomcat-embed-coreartifactId>
                    <groupId>org.apache.tomcat.embedgroupId>
                exclusion>
                <exclusion>
                    <artifactId>tomcat-embed-elartifactId>
                    <groupId>org.apache.tomcat.embedgroupId>
                exclusion>
                <exclusion>
                    <artifactId>tomcat-embed-websocketartifactId>
                    <groupId>org.apache.tomcat.embedgroupId>
                exclusion>
            exclusions>
        dependency>
        <dependency>
            <groupId>org.apache.tomcatgroupId>
            <artifactId>tomcat-annotations-apiartifactId>
            <version>8.5.51version>
        dependency>
        <dependency>
            <groupId>org.apache.tomcat.embedgroupId>
            <artifactId>tomcat-embed-coreartifactId>
            <version>8.5.51version>
            <exclusions>
                <exclusion>
                    <groupId>org.apache.tomcatgroupId>
                    <artifactId>tomcat-annotations-apiartifactId>
                exclusion>
            exclusions>
        dependency>
        <dependency>
            <groupId>org.apache.tomcat.embedgroupId>
            <artifactId>tomcat-embed-elartifactId>
            <version>8.5.51version>
        dependency>
        <dependency>
            <groupId>org.apache.tomcat.embedgroupId>
            <artifactId>tomcat-embed-websocketartifactId>
            <version>8.5.51version>
            <exclusions>
                <exclusion>
                    <artifactId>tomcat-embed-coreartifactId>
                    <groupId>org.apache.tomcat.embedgroupId>
                exclusion>
            exclusions>
        dependency>

这里列出了tomcat-embed-core,tomcat-embed-el,tomcat-annotations-api和tomcat-embed-websocket这四个依赖包,实际上应该根据你的具体项目中的依赖来升级版本

线上升级

由于升级只涉及jar依赖,如果部署项目是使用xxx.original+lib/*.jar方式部署。可以使用使用apache-tomcat-8.5.51.tar.gz 对对应的jar包替换。如果项目打包部署方式为xxx.jar,则直接用新构建的jar包替换原来的jar包即可。

参考

springboot2对应tomcat的AJP漏洞

你可能感兴趣的:(java)