一、漏洞描述
Apache Tomcat作为一个流行的开源Web服务器和Java Servlet容器并用于很多中小型项目的开发中。其中,Coyote作为Tomcat的连接器组件,是Tomcat服务器提供的供客户端访问的外部接口,客户端通过Coyote与服务器建立链接、发送请求并且接收响应。
近日发现Apache Tomcat中修复了一个信息泄露漏洞(CVE-2024-21733)。Apache Tomcat版本9.0.0-M11 - 9.0.43、8.5.7 - 8.5.63中均存在该信息泄露漏洞,由于coyote/http11/Http11InputBuffer.java
中在抛出CloseNowException异常后没有重置缓冲区位置和限制,威胁者可可以通过构造特定请求,发送不完整的POST触发错误响应,从而可能导致获取其他用户先前请求的数据,造成信息泄露。
漏洞名称:Apache Tomcat 信息泄露漏洞,关联漏洞:CVE-2024-24549、CVE-2024-34750
漏洞编号:CVE-2024-21733
漏洞等级:高危
安全建议:目前该漏洞已经修复,受影响用户可升级到以下版本:
Apache Tomcat >= 9.0.44
Apache Tomcat >= 8.5.64
关联资源:spring官网、tomcat官网、mvn仓库、Tomcat安全中心、Nist网站
二、排查处理
现场的为中小型项目,未直接使用功能tomcat作为容器使用,仅是jar包里spring-boor框架引入tomcat 内嵌到 web项目中作为web server使用,从而保证项目包可直接运行 webapp项目,无需再部署到额外的tomcat服务了;
现场用的SpringBoot,内部集成了spring的很多模块,比如tomcat、redis等。用SpringBoot搭建项目,只需要在pom.xml引入相关的依赖,和在配置文件中做些简单的配置就可以使用相应模块了。对于servlet stack applications, the spring-boot-starter-web includes Tomcat by including spring-boot-starter-tomcat
, but you can use spring-boot-starter-jetty
or spring-boot-starter-undertow
instead,更多参看web-server。springboot默认引入了spring-boot-starter-tomcat包,使TomcatServletWebServerFactory可以自动装配,在获取getBeanFactory().getBeanNamesForType(ServletWebServerFactory.class)时,默认得获取的beanName就是 tomcatServletWebServerFactory, 从而调用TomcatServletWebServerFactory的getWebServer方法创建TomcatWebServer, 启动tomcat。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- Exclude the Tomcat dependency -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
SpringBoot应用启动器基本的一共有44种,如下所示:
1)spring-boot-starter 这是Spring Boot的核心启动器,包含了自动配置、日志和YAML。
2)spring-boot-starter-actuator 帮助监控和管理应用。
3)spring-boot-starter-amqp 通过spring-rabbit来支持AMQP协议(Advanced Message Queuing Protocol)。
4)spring-boot-starter-aop 支持面向方面的编程即AOP,包括spring-aop和AspectJ。
5)spring-boot-starter-artemis 通过Apache Artemis支持JMS的API(Java Message Service API)。
6)spring-boot-starter-batch 支持Spring Batch,包括HSQLDB数据库。
7)spring-boot-starter-cache 支持Spring的Cache抽象。
8)spring-boot-starter-cloud-connectors 支持Spring Cloud Connectors,简化了在像Cloud Foundry或Heroku这样的云平台上连接服务。
9)spring-boot-starter-data-elasticsearch 支持ElasticSearch搜索和分析引擎,包括spring-data-elasticsearch。
10)spring-boot-starter-data-gemfire 支持GemFire分布式数据存储,包括spring-data-gemfire。
11)spring-boot-starter-data-jpa 支持JPA(Java Persistence API),包括spring-data-jpa、spring-orm、hibernate。