Apache Tomcat の脆弱性 CVE-2025-24813 の検知と緩和
エグゼクティブサマリー
2025 年 3 月 10 日に、Apache Tomcat の パス同等性の脆弱性 (CVE-2025-24813 に割り当てられたもの)が、パッチとともに公開されました。
この脆弱性によって RCE が許容される可能性がありますが、悪用するための前提条件に特定のデフォルトではない条件があるため、Apache では中程度の重大度の脆弱性とみなしています。
この脆弱性が公開された直後、Akamai は、この脆弱性の可能性があるサーバーを調査しようとする初期的な攻撃を確認しました。
このブログ記事では、Akamai の研究者が、脆弱性、悪用手法、検知戦略に関する詳細な情報を提供します。
Akamai Adaptive Security Engine Rapid Rule は、Akamai App & API Protector のお客様に自動的に保護を適用します。
また、検知のための Akamai Guardicore Segmentation Insight クエリーも提供しています。
- 影響を受けた Akamai Hunt のお客様には、すでに脆弱な資産に関する詳細なマッピングを提供しています。
CVE-2025-24813 とは?
2025 年 3 月 10 日、Apache Tomcat(Java ベースのアプリケーション(CVE-2025-24813)をホストするために一般的に使用されているオープンソースの Web サーバーと Java サーブレットコンテナ)のパス同等性の脆弱性が、パッチとともに発表されました。この脆弱性は特に、サーバーが内部でファイルパスを処理する方法に影響します。概念実証が公開されてからわずか数日後、攻撃者が実環境で悪用を試みていました。これは、悪用までの時間がますます短縮しているという、最近懸念されてきた傾向に従っています。
悪用には要件があるため、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 のデフォルトサーブレットの書き込み機能は、デフォルトでは無効になっていますが、これを有効にするように設定されている場合、攻撃者は、CVE-2025-24813 を使用して重大な影響を与えることができます。デフォルトで有効になっている Partial 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 を達成するには、以下のような 前提条件の組み合わせが揃っていることが必要です。
デフォルトサーブレットでは書き込み機能が明示的に有効になっていること
Partial PUT リクエストが許可されていること
Web アプリケーションがデフォルトの保存場所でファイルベースのセッション持続性を使用していること(悪性のシリアル化ペイロード用の書き込み可能なターゲットディレクトリとなる)
デシリアライゼーションに脆弱なライブラリが存在するか、アプリケーションで使用されていること(デシリアライゼーション攻撃によってペイロードが実行される)
さらに、攻撃者は、アプリケーションで使用される内部ファイル命名規則とターゲットのファイルシステムのディレクトリ構造を把握している必要がある
ほとんどの前提条件が設定されていますが、最も重要な前提条件(デフォルトのサーブレット書き込み機能)はデフォルトで無効になっています。
観測された攻撃トラフィック
Akamai Security Intelligence Group(SIG)は、この脆弱性が開示された直後に攻撃トラフィックを特定しました。観測された攻撃ペイロードの多くは、攻撃者がターゲットサーバーの脆弱性を調べるために設計した脆弱性探査ツールです。一般的な攻撃の変種では特に .session ファイルパスを標的とし、ランダムな命名則に従った 6 文字を .session ファイル拡張子の前に付与しています(図1)。
最もよく使用されているペイロードには、 .session ファイルがリクエスト本文として含まれており、それにはシリアライズされた悪性の Java オブジェクトが含まれていました。多くの場合には、悪性のオブジェクトは、このアップロードされたセッションファイルが Apache Tomcat によってデシリアライズされると、 java.net.URL オブジェクトを使用して攻撃元に通信(”call home")します(図 2)。
脆弱なアプリケーションの検知
ネットワーク全体で 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で使用可能なすべてのパスとハッシュを返します。返された JAR は、ハッシュ値を使って VirusTotal で検証したり、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 による緩和
攻撃の多くは、Java デシリアライゼーションの試行を検出するルールを含めた既存の Adaptive Security Engine ルールによって緩和されます(図 3)。
3000072 -デシリアライゼーション攻撃を検出
2025 年 3 月 19 日、Akamai の脅威リサーチチームは、 App & API Protector をご利用のお客様向けに、完全な検知ができるよう Adaptive Security Engine Rapid Rule を展開しました(図 4)。
3000957 — Apache Tomcat のリモートコード実行攻撃を検知(CVE-2025-24813)
Rapid Rule のバージョン 1 では、デフォルトアクションが Alert に設定されています。攻撃をブロックするには、トリガーの確認を行い、ルールアクションを「拒否」に設定して誤検出を排除してください。
まとめ
Akamai SIG は、お客様とセキュリティコミュニティ全体のために、このような脅威の監視、報告、緩和策作成を継続します。Akamai Security Intelligence Group からのよりタイムリーなニュースを確認するには、Akamai の リサーチホームページ をご覧になって、 ソーシャルメディアをフォローしてください。