Apache Tomcat の DoS 脆弱性 CVE-2025-31650:12件の PoC エクスプロイトが公開

PoC Exploit Released for Apache Tomcat DoS Vulnerability

2025/06/06 gbhackers — Apache Tomcat の深刻なメモリ・リークの脆弱性 CVE-2025-31650 が悪用され、未認証の攻撃者たちがサービス拒否攻撃の機会を手にしている。この脆弱性は、HTTP/2 実装における不正な優先度ヘッダーに起因するものであり、すでに 12件のエクスプロイトが公開されている。この脆弱性の影響が及ぶ範囲は、Tomcat のバージョン 9.0.76~9.0.102/10.1.10~10.1.39/11.0.0-M2~11.0.5 である。

脆弱性のメカニズムと攻撃ベクター

Apache のレポートによると、この脆弱性は、無効な優先度ヘッダーを取り込んだHTTP/2 リクエストが失敗した際の、不適切なクリーンアップに起因するという。

このような不正なリクエストを拒否する Tomcat は、以下の問題を引き起こす:

  • ストリーム・オブジェクトへのメモリ割り当てが、完全に解放されない
  • OutOfMemoryError の蓄積により、ヒープ領域が徐々に枯渇する
  • 継続的な攻撃を受けると、サーバは数分以内に応答不能になる

したがって、以下のようなヘッダーを送信することで、HTTP/2 のストリーム優先順位付けメカニズムを悪用できる。

textpriority: u=-1, q=NaN

この攻撃スクリプトは、22 種類の無効な優先順位パターンを持つ、数千もの同時リクエストを生成し、Tomcat の接続ハンドラーを圧倒する。

エクスプロイト・コード分析

公開されている Python PoC は、非同期リクエストを用いて攻撃効率を最大化するものだ。

pythonasync def send_invalid_priority_request(self, host, port, num_requests, task_id):
    async with httpx.AsyncClient(http2=True) as client:
        for _ in range(num_requests):
            headers = {
                "priority": random.choice(self.invalid_priorities),
                "user-agent": f"TomcatKiller-{task_id}-{random.randint(1,1e6)}"
            }
            await client.get(f"https://{host}:{port}/", headers=headers)

主な機能:

  • デフォルトで 300以上の同時タスク
  • 1タスクあたり 10万リクエスト・スループット
  • 基本的な検出を回避するためのランダム化された User-Agent 文字列
緩和策戦略とバージョン比較
Affected VersionPatched VersionPatch Method
9.0.76–9.0.1029.0.104Priority header validation rewrite
10.1.10–10.1.3910.1.40Memory cleanup hooks added
11.0.0-M2–11.0.511.0.6HTTP/2 stream termination fixes

推奨される対応策:

  1. Tomcat 9.0.104/10.1.40/11.0.6 への速やかなアップグレード
  2. レート制限の実装 (最大 100リクエスト/IP/秒)
  3. catalina.out で OutOfMemoryError エントリを監視
  4. WAF ルールを用いたリクエストのブロック
    text^priority:\s*(u=[^\d]+|q=[^0-9.]+) を含む

セキュリティ・チームにとって必要なことは、以下を用いての HTTP/2 のサポートの検証である:

bashcurl -vI --http2 https://target:8443/ -o /dev/null

それに加えて、潜在的なエクスプロイトを示す、HTTP/2 200 レスポンスも監視すべきである。

まとめ

この脆弱性が浮き彫りにするのは、企業の Web インフラにおけるプロトコル実装の欠陥のリスクである。

脆弱性 CVE-2025-31650 の CVSSv3.1 スコアは 7.5 (High) であり、有効なエクスプロイトが流通していることから、ユーザー組織にとっては優先的なパッチ適用が必須となる。この脆弱性を放置すると、実行が容易なメモリ枯渇攻撃により、サービスが長期間停止するというリスクが生じる。