了解我们在中国开展业务的承诺。 阅读全文

检测和抵御 Apache Tomcat CVE-2025-24813

漏洞利用可能会导致 RCE、严重的信息泄露或恶意内容注入。
漏洞利用可能会导致 RCE、严重的信息泄露或恶意内容注入。

执行摘要

  • 2025 年 3 月 10 日,Apache Tomcat 中的 路径等价漏洞 (分配有编号 CVE-2025-24813)被公开披露,同时发布的还有针对该漏洞的补丁。

  • 虽然该漏洞可以允许进行 RCE,但 Apache 认为它是一个中等严重程度的漏洞,因为只有满足特定的非默认先决条件时,它才能被利用。

  • 在该漏洞公开后不久,Akamai 就发现了初步的漏洞利用尝试,意图探查潜在的服务器是否存在该漏洞。

  • 在本博文中,Akamai 研究人员详细介绍该漏洞及其利用方式和检测策略。

  • Akamai 自适应安全引擎快速规则自动为 Akamai App & API Protector 客户提供保护

  • 我们还提供 Akamai Guardicore Segmentation Insight 查询来进行检测

  • 受影响的 Akamai Hunt 客户已经收到了存在漏洞的资产的详细清单

什么是 CVE-2025-24813?

Apache Tomcat 是一个热门开源 Web 服务器和 Java Servlet 容器,常用于托管基于 Java 的应用程序。2025 年 3 月 10 日,该软件中的一个路径等价漏洞 (CVE-2025-24813) 被披露,同时发布的还有针对该漏洞的补丁。具体来说,该缺陷会影响服务器内部处理文件路径的方式。在公开的概念验证发布仅仅几天后,攻击者便闻风而动,试图在现实环境中利用该漏洞,这与我们近来观察到的一个令人担忧的趋势相符:漏洞利用时间不断缩短。

由于存在漏洞利用要求,因此 Apache 将 CVE-2025-24813 标记为中等严重程度的漏洞。存在漏洞的服务器必须满足一组特定的先决条件,这导致该问题不太可能遭到利用。但是,无论这些先决条件如何,都必须立即对该漏洞进行修补,因为在遭到利用时它可能会导致未经身份验证的远程代码执行 (RCE)。

该漏洞在 Apache Tomcat 版本 11.0.3、10.1.35 和 9.0.99 中得到了修复,但是 运行版本 11.0.0-M1 到 11.0.2、10.1.0-M1 到 10.1.34 以及 9.0.0-M1 到 9.0.98 的服务器仍然可能受到影响

什么是 CVE-2025-24813?

当 Apache Tomcat 的默认 Servlet 被配置为启用写入功能(默认情况下处于禁用状态)时,攻击者可以使用 CVE-2025-24813 造成巨大影响。例如,与允许部分 PUT 请求的默认行为相结合时,攻击者可以将特制的序列化会话文件上传到可写目录中。此文件被上传后,后续的 HTTP 请求会强制 Tomcat 对其内容进行反序列化,这会触发嵌入式攻击载荷的执行。

漏洞利用可能会导致 RCE、严重的信息泄露或恶意内容注入,进而可能破坏关键的服务器配置文件。受影响的 Apache Tomcat 版本包括 11.0.0‑M1 到 11.0.2、10.1.0‑M1 到 10.1.34 以及 9.0.0‑M1 到 9.0.98。

CVE-2025-24813 的利用

漏洞利用的最终结果相当严重,但通过此漏洞实现 RCE 需要满足一组严格的 先决条件

  • 必须对默认的 Servlet 明确启用写入功能

  • 必须允许部分 PUT 请求

  • Web 应用程序必须将基于文件的会话持久性与默认存储位置结合使用(为恶意的序列化攻击载荷提供可写的目标目录)

  • 此应用程序必须存在或正在使用易受反序列化攻击的库(允许通过反序列化攻击执行攻击载荷)

  • 此外,攻击者必须了解该应用程序使用的内部文件命名约定和攻击目标的文件系统目录结构

虽然大多数先决条件可能都已满足,但最关键的先决条件(默认的 Servlet 写入功能)默认处于禁用状态

观察到的攻击流量

在该漏洞被披露后不久,Akamai 安全情报组 (SIG) 便发现了攻击流量。所观察到的大多数攻击载荷都是漏洞探测,旨在帮助攻击者确定目标服务器是否存在漏洞。具体来说,另一种常见的攻击会以 .session 文件路径为目标,该路径遵循随机命名方案,即一个六字符的基本名称附加 .session 文件扩展名(图 1)。

A common attack variant specifically targets .session file paths, which follow a randomized naming scheme — a six-character base appended with the .session file extension (Figure 1). Fig. 1: Examples of .session attack variant

最常见的攻击载荷包括一个 .session 文件作为请求正文,该文件由恶意的 Java 序列化对象构成。大多数情况下,在这个已上传的会话文件被 Apache Tomcat 反序列化后,该恶意对象会使用 java.net.URL 对象来“联系大本营”(图 2)。

In most cases, the malicious object will use the java.net.URL object to “call home” once this uploaded session file is deserialized by Apache Tomcat (Figure 2). Fig. 2: Attempted .session payload in request body

检测存在漏洞的应用程序

识别一个网络中所有存在漏洞的 Apache Tomcat 实例非常困难。安全团队必须对各种资产进行评估,因为 Apache Tomcat 已集成在很多地方,包括正在使用防御者所不知道的库的应用程序。

与近期的 Apache Camel 漏洞类似, 此库可能作为间接依赖项出现,意味着源代码中并没有明确地包含库,而是通过另一个软件包引入。不论是对于检测还是抵御,这都进一步加剧了复杂性。

Apache Tomcat 可以单独安装在 Windows 和 Linux 上,或者作为 Kava 应用程序的一部分进行安装。可通过对目录进行递归扫描以查找名为 tomcat-api.jar的 Java 归档 (JAR) 文件来检测它。 一旦找到与 Tomcat 相关的 JAR 文件,通过检查其清单文件就能确定所用的版本

对于提取出来的版本,安全团队可以根据 Apache 的安全建议 进行交叉引用,来评估可能存在的漏洞。以下版本受到影响:

  • 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

自动检测

对于 Akamai Guardicore Segmentation 客户,我们已经构建了 Insight 查询,可以识别存在漏洞的资产。该查询将返回 tomcat-api.jar的所有可用路径和哈希值。您可以通过哈希值在 VirusTotal 中检查所返回的 JAR,也可以通过 JAR 内的清单文件来获取正确版本。

Windows — 应用程序内的 Apache Tomcat

  WITH relevant_cwds as (
    SELECT DISTINCT
    proc.pid,
    proc.path,
    proc.cmdline,
    proc.cwd,
    mmap.path AS mmap_path
    FROM process_memory_map AS mmap
    LEFT JOIN processes AS proc USING(pid)
    WHERE mmap_path LIKE "%jvm%"

    UNION

    SELECT DISTINCT
    proc.pid,
    proc.path,
    proc.cmdline,
    proc.cwd,
    proc.path AS placeholder_path
    FROM processes AS proc
    WHERE proc.name IN ("java", "javaw", "java.exe", "javaw.exe")

    UNION

    SELECT DISTINCT
    proc.pid,
    proc.path,
    proc.cmdline,
    proc.cwd,
    proc.path AS placeholder_path
    FROM processes AS proc
    WHERE LOWER(proc.name) LIKE "%tomcat%"
),

RELEVANT_JAR_PATHS AS (
    SELECT file.path as lib_path, cwd, cwd || '..\%\%\tomcat-api.jar' AS jar_path, sha256
    FROM file INNER JOIN relevant_cwds ON file.path LIKE jar_path
    INNER JOIN hash on file.path = hash.path 
    UNION
    SELECT file.path as lib_path, cwd, cwd || '..\%\tomcat-api.jar' AS jar_path, sha256
    FROM file INNER JOIN relevant_cwds ON file.path LIKE jar_path
    INNER JOIN hash on file.path = hash.path 
    UNION
    SELECT file.path as lib_path, cwd, cwd || '%\%\tomcat-api.jar' AS jar_path, sha256
    FROM file INNER JOIN relevant_cwds ON file.path LIKE jar_path
    INNER JOIN hash on file.path = hash.path 
  )

SELECT DISTINCT lib_path, cwd, jar_path, sha256
FROM RELEVANT_JAR_PATHS

Linux — 应用程序内的 Apache Tomcat

  WITH relevant_cwds as (
    SELECT DISTINCT
    proc.pid,
    proc.path,
    proc.cmdline,
    proc.cwd,
    mmap.path AS mmap_path
    FROM process_memory_map AS mmap
    LEFT JOIN processes AS proc USING(pid)
    WHERE mmap_path LIKE "%jvm%"

    UNION

    SELECT DISTINCT
    proc.pid,
    proc.path,
    proc.cmdline,
    proc.cwd,
    proc.path AS placeholder_path
    FROM processes AS proc
    WHERE proc.name IN ("java", "javaw", "java.exe", "javaw.exe")

    UNION

    SELECT DISTINCT
    proc.pid,
    proc.path,
    proc.cmdline,
    proc.cwd,
    proc.path AS placeholder_path
    FROM processes AS proc
    WHERE LOWER(proc.name) LIKE "%tomcat%"
),

RELEVANT_JAR_PATHS AS (
    SELECT file.path as lib_path, cwd, cwd || '../%/%/tomcat-api.jar' AS jar_path, sha256
    FROM file INNER JOIN relevant_cwds ON file.path LIKE jar_path
    INNER JOIN hash on file.path = hash.path 
    UNION
    SELECT file.path as lib_path, cwd, cwd || '../%/tomcat-api.jar' AS jar_path, sha256
    FROM file INNER JOIN relevant_cwds ON file.path LIKE jar_path
    INNER JOIN hash on file.path = hash.path 
    UNION
    SELECT file.path as lib_path, cwd, cwd || '%/%/tomcat-api.jar' AS jar_path, sha256
    FROM file INNER JOIN relevant_cwds ON file.path LIKE jar_path
    INNER JOIN hash on file.path = hash.path 
  )

SELECT DISTINCT lib_path, cwd, jar_path, sha256
FROM RELEVANT_JAR_PATHS

Windows — 已安装的 Apache Tomcat

  SELECT name, version
  FROM programs
  WHERE name LIKE '%tomcat%'
  AND ((version >= '11.0.0' AND version <= '11.0.2') OR (version >= '10.1.0' AND version <= '10.1.34') OR (version >= '9.0.0' AND version <= '9.0.98'))

Linux — 已安装的 Apache Tomcat

  SELECT name, version
  FROM deb_packages
  WHERE name LIKE '%tomcat%'
  AND ((version >= '11.0.0' AND version <= '11.0.2') OR (version >= '10.1.0' AND version <= '10.1.34') OR (version >= '9.0.0' AND version <= '9.0.98'))
  UNION
  SELECT name, version
  FROM rpm_packages
  WHERE name LIKE '%tomcat%'
  AND ((version >= '11.0.0' AND version <= '11.0.2') OR (version >= '10.1.0' AND version <= '10.1.34') OR (version >= '9.0.0' AND version <= '9.0.98'))

利用 Akamai App & API Protector 进行抵御

现有的 Adaptive Security Engine 规则(包括用于检测 Java 反序列化尝试的规则)可以防范很多利用尝试(图 3)。

  • 3000072 - 检测到反序列化攻击

Many exploit attempts are mitigated by existing Adaptive Security Engine rules, including those that detect Java deserialization attempts (Figure 3). Fig. 3: Adaptive Security Engine rule 3000072 detecting CVE-2025-24813 exploit attempt

2025 年 3 月 19 日,Akamai 威胁研究团队还部署了适用于 App & API Protector 客户的 Adaptive Security Engine 快速规则,以提供全面覆盖(图 4)。

  • 3000957 — 检测到 Apache Tomcat 远程代码执行攻击 (CVE-2025-24813)

On March 19, 2025, Akamai’s Threat Research Team also deployed Adaptive Security Engine Rapid Rule for App & API Protector customers to provide full coverage (Figure 4). Fig. 4: Adaptive Security Engine Rapid Rule provides full coverage

快速规则的版本 1 将默认操作设置为“告警”。为了阻止攻击尝试,建议客户在查看触发器后将规则操作设置为“拒绝”,以消除任何误报。

总结

Akamai SIG 将继续监控此类威胁,并随时向我们的客户及整个安全社区报告相关情况以及创建抵御措施。如需随时了解 Akamai 安全情报组带来的更多突发新闻,请查看我们的 研究首页 并关注我们的 社交媒体。