
Local reproduction lab for Apache Tomcat CVE-2025-24813, documenting exploitation conditions and AI-assisted verification of the vulnerability.
仅用于本地授权实验、补丁理解和防守验证。请勿对未授权目标发送请求。
本项目记录在 Apache Tomcat 9.0.98 本地实例上对 CVE-2025-24813 的复现过程:使用 partial PUT 写入临时文件,在启用文件型 Session 持久化且反序列化过滤条件宽松的配置下,验证 Session 文件加载及 Payload 执行链路。
.inject.session 写入成功,再确认访问触发 Session 加载并执行 Payload;不能仅凭 HTTP 状态码判断成功。409 或 500,但文件写入和后续触发仍需结合文件内容、服务器日志及受控副作用分阶段判断。Apache 官方安全公告列出了 CVE-2025-24813 的触发前提、影响范围(Tomcat 9.0.0-M1 至 9.0.98)和 9.0.99 修复信息: https://tomcat.apache.org/security-9
java -version 为准)requests127.0.0.1:8080scripts/reproduce_local.py # 本地验证脚本,目标默认为 localhost:8080
evidence/ # 实验截图(已按步骤重命名)
python3 -m venv .venv
. .venv/bin/activate
python -m pip install requests
python scripts/reproduce_local.py
脚本中的目标固定为本机实验地址,不包含远程扫描逻辑。运行前应在本地 Tomcat 实例中确认:
work/Catalina/localhost/ROOT 可观察。PUT /inject/session 携带 Content-Range,观察临时文件是否生成;work/Catalina/localhost/ROOT/.inject.session 的大小和内容;JSESSIONID=.inject 访问受控本地页面,观察 Session 文件加载;409/500 直接当成漏洞复现失败或成功。HTTP 头部必须使用真正的 CRLF(字节 0d 0a),不要把 0x0d0x0a 作为可见文本发送。Python 中应使用 b"\\r\\n" 或由 requests 负责构造请求头。
优先升级到包含修复的 Tomcat 版本,并重新检查 Default Servlet 写入权限、partial PUT 使用场景和 Session 持久化过滤器配置。修复后重复同一组本地验证步骤,预期临时文件写入链路或 Session 加载链路不再成立。
本仓库不提供面向互联网目标的扫描、持久化或批量利用功能。所有内容仅限本人控制的本地实验环境和经明确授权的靶场。