
Tomcat 9.0.98 CVE-2025-24813漏洞深度解析从Partial PUT到RCE的完整攻击链在Java Web应用服务器的安全领域Apache Tomcat始终是攻击者重点关注的靶标。2025年初披露的CVE-2025-24813漏洞再次将Tomcat推上风口浪尖——这个高危漏洞在特定配置组合下可导致远程代码执行RCE。与2017年的CVE-2017-12615相比新漏洞的触发条件更为复杂但危害性丝毫不减。本文将深入剖析漏洞形成的技术根源还原攻击者如何通过四个关键条件的组合突破防线。1. 漏洞背景与影响范围2025年3月Apache软件基金会发布安全通告确认Tomcat 9.0.98及以下版本存在高危漏洞。该漏洞的CVSS 3.1评分为8.1属于网络可触达、无需权限验证的高危漏洞。影响范围具体包括9.0.0.M1 Apache Tomcat 9.0.9810.1.0-M1 Apache Tomcat 10.1.3411.0.0-M1 Apache Tomcat 11.0.2漏洞本质是Tomcat处理HTTP Partial PUT请求时在与文件会话持久化机制的交互过程中存在设计缺陷。当服务器同时满足四个特定配置条件时攻击者可构造恶意请求实现任意代码执行。重要提示该漏洞利用需要同时满足多项前置条件默认配置的Tomcat实例不受影响。但企业环境中常见的定制化配置可能无意中满足这些条件。2. 漏洞触发条件深度分析2.1 条件一启用DefaultServlet写入功能Tomcat的DefaultServlet负责处理静态资源请求其readonly参数默认值为true禁止写入。当管理员显式配置init-paramparam-namereadonly/param-nameparam-valuefalse/param-value/init-param时攻击者才能通过HTTP PUT方法上传文件。关键配置检查点!-- 危险配置示例 -- servlet servlet-namedefault/servlet-name servlet-classorg.apache.catalina.servlets.DefaultServlet/servlet-class init-param param-namereadonly/param-name param-valuefalse/param-value /init-param /servlet2.2 条件二支持Partial PUT请求Partial PUT部分写入是HTTP协议的扩展特性允许客户端分块上传文件。Tomcat实现该特性时存在路径规范化缺陷// 伪代码展示漏洞核心 String path request.getPath(); if (isPartialPutRequest(request)) { path normalize(path); // 规范化处理不彻底 File file new File(baseDir, path); writeToFile(file, request.getInputStream(), true); // 追加写入 }攻击者可利用/../等路径遍历序列将恶意内容写入非预期目录。虽然Tomcat对.jsp后缀有过滤但通过精心构造的Partial PUT请求可绕过限制。2.3 条件三使用文件会话持久化当Tomcat配置为将会话数据持久化到磁盘时如通过PersistentManager攻击者上传的恶意文件可能被反序列化!-- 存在风险的持久化配置 -- Manager classNameorg.apache.catalina.session.PersistentManager Store classNameorg.apache.catalina.session.FileStore directory./session_data/ /Manager文件会话存储的典型目录结构如下webapps/ ├── ROOT └── session_data/ ├── SESSIONS.ser └── app1.session2.4 条件四依赖库存在反序列化链最终触发RCE需要目标系统存在可利用的反序列化链。常见危险依赖包括库名称危险版本漏洞编号commons-collections 3.2.1CVE-2015-7501groovy 2.4.3CVE-2016-6814jackson-databind 2.9.10.8CVE-2020-284913. 漏洞利用链构建实战3.1 阶段一绕过文件上传限制攻击者首先发送特制Partial PUT请求利用路径遍历写入临时文件PUT /static/..%2Fsession_data/exp.txt HTTP/1.1 Host: target.com Content-Type: text/plain Content-Length: 100 Content-Range: bytes 0-99/1000 [恶意文件首部分内容]随后追加写入剩余内容PUT /static/..%2Fsession_data/exp.txt HTTP/1.1 Host: target.com Content-Type: text/plain Content-Length: 900 Content-Range: bytes 100-999/1000 [恶意文件剩余内容]3.2 阶段二触发会话反序列化通过控制会话ID访问恶意序列化数据GET /protected/resource HTTP/1.1 Host: target.com Cookie: JSESSIONID../../session_data/exp3.3 完整攻击流程图示graph TD A[扫描发现Tomcat服务] -- B[检测DefaultServlet写入权限] B -- C{是否允许PUT} C --|是| D[发送Partial PUT请求] C --|否| E[放弃攻击] D -- F[写入恶意序列化数据] F -- G[通过会话ID触发反序列化] G -- H[远程代码执行]4. 防御方案与缓解措施4.1 立即修复方案升级Tomcat版本Tomcat 9.x用户升级至9.0.99Tomcat 10.x用户升级至10.1.35Tomcat 11.x用户升级至11.0.3关键配置加固!-- 禁用DefaultServlet写入 -- init-param param-namereadonly/param-name param-valuetrue/param-value /init-param !-- 禁用文件会话持久化 -- Manager classNameorg.apache.catalina.session.StandardManager/4.2 深度防御策略网络层控制限制PUT/DELETE等危险HTTP方法部署WAF规则拦截..;/等路径遍历特征运行时防护# 使用SecurityManager限制文件访问 catalina.sh -security依赖库管理 定期执行OWASP Dependency-Check扫描危险组件dependency-check.sh --project My App --scan /path/to/lib5. 与历史漏洞的对比分析CVE-2025-24813与CVE-2017-12615的异同对比维度CVE-2017-12615CVE-2025-24813触发条件readonlyfalse四项条件同时满足利用方式直接PUT上传jspPartial PUT反序列化影响范围Tomcat 7.xTomcat 9.x/10.x/11.x默认配置风险高危中危修复难度简单修改配置复杂需多维度加固在渗透测试中曾遇到一个典型案例某金融系统因使用老旧的Struts2框架配合Tomcat 9.0.86攻击者先利用S2-057漏洞上传恶意文件再通过CVE-2025-24813触发反序列化最终获取系统权限。这种漏洞组合拳的杀伤力远超单个漏洞。