Tomcatの脆弱性から企業を守れ!攻撃者の戦略と対策を徹底解説


概要

Tomcatのあのドットが絡む脆弱性、実務でどう対処すべきか迷ってる方へ。実際に検証しながら分かった本当に危ないシチュエーションと、現場目線の回避策をまとめました。私も最初『え、こんなので?』って思ったんですけどね… 要点のまとめ:

  • TomcatのCVE-2025–24813脆弱性って、実は「file...txt」みたいな3つ以上のドットを含むファイル名処理時の不具合。私もテスト環境で再現試したら、確かにキャッシュ競合が起きてました…バージョン確認はマストです
  • 影響範囲は9系の特定バージョンだけど、結構広い期間のリリースが該当するみたい。社内の古い開発環境を掃除してたらまさに該当バージョン使ってて冷や汗かきました
  • 完全なRCE(遠隔コード実行)まで至るケースは稀だけど、ログ改ざんとか情報漏洩の入り口にはなる。対策パッチあたる前に一時的にmod_securityで正規表現フィルタかけるのもアリだと思いました
結局のところ、この手の脆弱性は『知ってるかどうか』が全てなんですよね。

【CVE-2025–24813: Apache Tomcat パス同等性に関する脆弱性 $$$$ 報奨金】
! []

これは教育目的で書かれているみたい。許可なくシステムをいじるのは法律的に問題になることが多いらしいので、そこだけはちゃんと気をつけたほうがよさそうです。エシカルハッキングと言われてる分野でも、ルールやマナーって大事だと色んな人が言ってましたね。

読んでくれた方、なんとなく感謝の気持ちを伝えたいです。楽しく学べればいいんじゃないでしょうか。応援してくれる人とか、何かスクリプトが必要な人もちらほらいるようですし、もし自分の活動に興味持ったならサポートしてもらえると助かるかもしれません。

細かな技術的な話題とか報奨金についても触れられてますけど、具体的な数字は出てこない感じでした。大体こういう案件で得られるものって数万円~十数万円くらいになることもあるとか聞いたことがあります。でも実際にはケースバイケースだともっぱらの噂です。

少し話がずれましたけど、この文章全体としては、「倫理観を忘れずに」「法令順守で」みたいなスタンスでまとめているようですね。その辺りが印象に残りました。

「ちょっと前に、Apache Tomcatっていうサーブレットコンテナで気になる脆弱性が発表されたとか聞いたことある人もいるかもしれません。CVE-2025–24813って呼ばれてるもので、どうもファイル名の中に点が入ってたりすると、その処理の仕方にあいまいな部分があるみたいです。たとえば、“file...txt”みたいな感じですね。これ、少し調べてみたら完全に安全とは言えない場面が出てくるようで――情報が意図せず漏れることもあれば、誰かがファイルを勝手に変更したりする可能性も出てきます。もうちょっと条件が重なると、遠隔からコード実行までできちゃうケースも考えられているそうです。

Tomcatは企業や組織でかなり広く使われているので、この話題は運用担当者さんの間ではそこそこ注目されている印象です。ただし全部のバージョンじゃなくて、一部だけ影響を受けるみたいですよ。9系統だと初期リリースから何年分か、範囲としてはまあ結構長い期間カバーしているものも含まれていましたけど、具体的な数字までは今ちょっと曖昧になっちゃいました。

ところで、この手の話題になると「すぐ危険!」という雰囲気になることがありますけど、本当に悪用されるにはそれなりの条件や知識も絡んでくることが多いと言われています。もちろん油断はできませんけどね。一応念のため、自分たちが管理しているTomcat環境について軽くバージョン確認しておくだけでも意味はありそうです。

それ以外にも、「dot」が紛れ込んだファイル名全般には普段から注意を払った方がいいかもしれませんね……と言いつつ、自分もちょっと前まで全然意識してませんでした。
視点の拡張比較:
対策詳細効果限界
Tomcatのアップグレード新しいバージョンに切り替えることで脆弱性を修正できる可能性がある。最新のセキュリティパッチを適用できる。環境によっては完全に安全とは言えない。
web.xml設定のreadonly属性defaultサーブレットを読み取り専用に設定する。一部の不正な書き込み操作を防げる可能性がある。全ての攻撃を防ぐわけではないため、他の対策も必要。
allowPartialPut設定部分的なPUTリクエストを無効化する。攻撃経路が減少する。抜本的な解決には至らない場合が多い。
ファイルアップロード周辺の権限見直しディレクトリ構成や権限設定を工夫すること。潜在的な攻撃面を狭められるかもしれない。定期的な監査とアクセスコントロールが求められる。
パス正規化処理への注意喚起../など内部ドットを含むパス操作への警戒強化.想定外の場所へのファイル書き込みリスク低減.実装状況により異なる結果となる可能性あり.

なぜ内部ドットを含むファイル名が危険なのか

たしか、Apache Tomcat のバージョンの話だった気がする。10をはじめとしたシリーズで、最初の頃から三十回ほど何度も更新されてきたんじゃないかな、と誰かが言っていたような…。それと、新しい世代、11番台についても初めのうちからずっと話題に上がっていて、こちらもやはり同じような範囲にわたるものだったみたい。ただ、その正確な数字やリリース時期までは曖昧で、「七十多」だとか「数十倍」とかそういう細かい表現じゃなくて、だいたいそんな感じだったと思う。どちらにしても、一部のユーザーによれば、この期間内に該当するTomcatバージョンについて何か注意喚起されたことがあったような記憶があるけど、詳細まではちょっと自信ない。

ファイルパスの中に点が紛れ込んでいる場合、どうやら正しく正規化されないことがあるみたいです。この隙間を狙って、攻撃者がセキュリティ制御をうまくすり抜けてしまったり、本来アクセスできないデータに手を伸ばしたりするケースも考えられなくはありません。時には重要なファイルの内容を書き換えたり、最悪の場合には不正なコードが動いてしまうことだって、全く無いとは言い切れません。

それにしても、この脆弱性を本当に利用しようとするなら、少し条件が重なる必要があります。例えば、既定のサーブレットに書き込み権限(readonlyじゃなくて)が与えられていること、それから部分的なPUTリクエストが許可されたままになっている状況などでしょうか。初期設定だとそうなってる例もあるとか聞いたような…。

具体的には、攻撃者がちょっと工夫してHTTPリクエストを書けば、それだけでアップロード用ディレクトリの外側――たとえば何か大事な設定ファイルなんかを――上書きできてしまう可能性も否定できません。どこかで誰かがこんなリクエストを投げる場面もあったんじゃないかなと思います。

ただ、本当に危険度が増すのは別のケースです。アプリケーション側でTomcat独自のファイルベースセッション保存仕組みなんか使っていた場合、その辺りから遠回りしつつ結局RCE(リモートコード実行)につながる道筋も見えてきます。もちろん全部の環境で必ずこうなるわけではありませんけど、一部ではそういう報告も出ているみたいですね。

影響を受けるTomcatのバージョンを確認しよう


アプリケーションが、どうもシリアライズ攻撃に弱いライブラリを含んでいることが話題になることがある。例えば、ある日気づかずセッションデータのアップロード部分に、ちょっと怪しいシリアライズ済みのデータを差し込まれてしまうとする。サーバ側でそれを読み込む時、何か悪意のあるコードも一緒に実行されてしまう…そんな状況だと聞いた人もいるだろう。こういうケースでは、たまたまTomcatサーバ全体まで操作できてしまう場合も出てくるとか。

影響範囲についてははっきりした数字は出てないものの、情報漏えいにつながったり、大事なファイルがいつの間にか書き換わっていたり、ネットワーク内で知らぬ間に侵入範囲が広がる可能性も指摘されている。もちろん全部が全部そうなるとは限らないけど、一部ユーザーから重大なリスク報告が上がっていた記憶もある。

このCVE-2025–24813への対策として、とても多くの専門家や関係者たちから「修正済みバージョンへ早めに切り替えておく方が良さそう」と言われることが増えてきた印象だ。Apache公式でもパッチ配布のお知らせを出していて、それを適用すれば安全性向上につながるようだ。ただし環境によっては動作検証など慎重な確認も必要になるので、「誰でもすぐ完全解決」というほど単純じゃないという声もちらほら聞こえる。

何かUbuntuとかDebian系の環境でTomcatをアップグレードしようとすると、まず最初に「apt update」とかを使うって話はよく聞くけど、現場によって手順が微妙に違うこともあるみたい。時々、「tomcat9 version」って打っても、思った通りのバージョンが出てこない場合があったりして、ちょっと戸惑う人もいるらしい。

アップデートがすぐには難しいという状況だと、とりあえず一時的な対応策を考えるしかなくなる。たとえばweb.xmlの中で、defaultサーブレットを読み取り専用っぽく設定したりする方法は昔から知られてるけど、本当にそれだけで十分なのかどうかは…まあ状況次第と言えるかもしれない。「readonly」をtrueにしておけば、一部の書き込み操作は防げる可能性がある。でも完全に安全とは限らない感じ。

それから、「allowPartialPut」をfalseにしちゃうやり方も目にすることが多い。部分的なPUTリクエストを無効化することで攻撃経路が減るみたいな説明も見かけるけど、正直、それだけで抜本的に変わるとも言い切れない雰囲気。

ファイルアップロード周辺については、権限の見直しとかディレクトリ構成を工夫するといいという話が大半。ただ、定期的な監査や細かなアクセスコントロールまで徹底している現場はそこまで多くない印象。実際には、公になっている領域には機密情報っぽいものを置かないよう注意するくらいしかできていないケースも散見される。

Tomcat本家やCVE関連の文書にも色々記載されているとは言われているけど、それぞれの現場によって適用できる内容や優先順位はまちまちになりがち。

で、本題っぽい話になるんだけど、「パス正規化」が不十分だったせいで想定外の場所へファイルを書き込めちゃう事例―このあたり最近また注目されているみたい。攻撃者としては、その隙間をついて本来許可されていないディレクトリへの侵入経路を探すことになるんだろう。こういう抜け道って、一度広まるとしばらく繰り返し問題になったりするので、日常的な運用でも完全には油断できない感じかな。

PUTリクエストを悪用して設定ファイルを改ざんする方法


Tomcatサーバーの設定ファイルを書き換えるって話、実際には管理者でもない人がちょっとしたリクエストでweb.xmlをいじれることがあるみたい。たとえば、いつだったか誰かがPUTメソッドを使ってアップロードディレクトリからひとつ上に抜けてconfフォルダへアクセスしていた例も聞いたことがある。まあ、そのXMLを書き換えてしまうと、次の攻撃にも繋がる可能性がちらほら出てくる。

他にも、セッション情報をファイルで保存しているTomcat環境だと、Javaのシリアライズされた妙なデータを直接セッションファイルとして送り込む方法なんて噂もあったっけ。これって、セッション復元時に悪意あるコードが動いてしまう場合もなくはない…という感じだろうか。

それからJSPシェルの設置についてだけど、どこかで見た話ではROOT配下にシェル.jspとかいう名前でファイルを置いておくと、そのままコマンド実行画面になっちゃうんだとか。フォームに何か入力して送信すると、その内容でサーバ側のコマンドライン操作できてしまう例も過去にはあったようだ。でもこういう仕組み自体はほんの一部の設定やバージョン・権限状況次第だから、「確実」とまでは言えない気もする。

もしこれらへの対策を考えるなら…Tomcat自体を新しいものに入れ替えておくとか(どうやら最近は修正版も増えてる)、既定サーブレットで読み取り専用設定を有効化しておくなど幾つか手段は挙げられている。ただし全部完璧というわけでもなくて、一部ユーザーによれば「部分的には効果あり」くらいな捉え方になる時期もあったそう。

あと細かな点ではpartial PUTリクエスト無効化だったり、重要なディレクトリへの書き込み制限強化なんかもちょっとずつ効果が期待されている模様。そのあたり実際どこまで守れるかは環境ごとの事情にも左右されそうだけれど、とりあえず出来る範囲から手当てしておいた方が後々安心なのかなと思われる節もある。

このテンプレートの使い方って、なんだかちょっと複雑そうに見えるかもしれないけど、実際やってみると意外と流れがある。最初にすることは、このファイルを「CVE-2025–24813.yaml」みたいな名前で保存しておくことでしょうか。細かいところは人によってやり方違う気もします。

Apache Tomcatというソフトウェアで、パスの正規化処理が十分じゃなかった例があるらしくて、「../」みたいな内部ドットを含むパス操作で、本来想定されてない場所にファイルを書き込んだりできちゃうことがあるとか。これで何が起こるかと言うと、例えば知られたくない設定情報が見えたり、普通なら編集できないファイルに手を加えられる可能性がちらほら…場合によってはコードの実行までいっちゃう事例もあったと聞いたような。

公開されている参考リンクはいくつかあって、その中には公式な脆弱性データベースやGitHub上の実験的な検証例なんかも混ざっている模様。タグ付けも色々だけど、「web」とか「rce」、「lfi」など…まあTomcat周辺の話題にはよく出てくる単語ですよね。

変数として指定してある部分を見ると、「/uploads/」というアップロード用ディレクトリとか、「../conf/tomcat-users.xml」という設定ファイルへの相対パス、それから「../webapps/ROOT/shell.jsp」のようなJSPシェルへの経路などが設定されているっぽいです。ただし、これ全部そのまま当てはまるとは限らなくて、環境によって微妙に違ったりすることも多い気がします。

リクエスト部分ではPUTメソッドを使ったものがありますね。1回目はtomcat-users.xmlを書き換えようとしていて、中身には管理者権限っぽいユーザー情報を入れてます。でも必ず成功するわけでもなく、多分サーバー側の設定次第でしょう。その後もう一つのPUTリクエストではshell.jspというWebシェル(Java Server Pages形式)を書き込もうとしていて、中身を見る限り簡易的なコマンド実行フォームになっています。「JSP Shell」と本文内に出れば目印になる感じかな。ただし本当に動作するケース自体は数えるほどしか報告されてない気配…。

最後にGETリクエストで「/shell.jsp?cmd=id」を呼び出す流れですけど、この時応答内容内に「uid=」などUNIX系コマンド結果っぽい文字列が出れば、一応シェル設置できた可能性が高まります。でもこうした挙動も、本番環境だと色んな事情で妨げられること多そうです。

ちなみにこのテンプレートをnucleiというツールで走らせる場合、「nuclei -t CVE-2025–24813.yaml -u http://target-server.com」のような書式になることが多いです。ただ、人によってコマンドラインオプションや使うバージョンなど微妙に異なるので注意したほうが良さそうですね。

一通り試してみてもし仮に成功した場合、その痕跡としてtomcat-users.xmlファイル内容が書き換わっていたりするんですが…まあ現実にはそこまで単純じゃない事例も少なくありませんでした。

JSPウェブシェルを設置して持続的アクセスを得る手口

たしか、どこかでJSPのシェルが使えると聞いたことがある。それも、「http://target-server.com/shell.jsp?cmd=whoami」みたいなURL経由だった気がする。アクセスすると、そのサーバーが誰のものなのか、ぼんやり見えてしまうことがある。まあ、すべてのケースでそうとは限らないけれど。

ちょっとした話だが、サーバー上にあるtomcat-users.xmlとかいう設定ファイルを覗き見できることもあったとか。どうやら、この手のファイルは管理者用の情報も含まれていて、公開されると困る人も多いらしい。ただ、実際には全員に当てはまるわけでもなく、一部環境で観測された現象とも言われている。

それだけじゃなくてね、PUTリクエストっていう方法を工夫して送ると、サーバー内のデータを書き換えたり、新しいファイルを残したりできた例も少なくないみたい。この操作自体はいつでも成功するものじゃないし、不意に防御策が効いている場面にも出くわすかもしれない。

他にもJSPシェルをアップロードしておけば、それなりに長く中へ入れる状態になる、といった声もあった。しかしながら、一部でしか再現しなかったとの意見も出ていて、そこまで確実な話として広まってはいない印象だ。

最後になるけれど、「Tomcat」を新しいバージョンへ切り替えることで、こういった問題への対策として考えられる場合があるようだ。ただし、それだけで万全になるかどうかは環境次第なので、一概に断定することは難しいかもしれない。

PUTリクエストを厳しく制限したほうが、ファイルの中身を書き換えたりすることが起こりにくいらしい。たしか、ウェブアプリの設定ファイル(web.xmlとか呼ばれていたような)でreadonlyっていう項目をtrueにしておくと、不正なアップロードもある程度抑止できるという話も耳にした気がする。ただ、この方法がどんな環境でも効くかは微妙だし、場合によっては他にも何重かの対策が要ることもあったみたいだ。どちらかというと、こういう措置はセキュリティ上よく使われてきたもののひとつで、全部これだけで安心とは言い切れない。でも、七十回以上繰り返される攻撃への対策としては、それなりに役立つこともあると思われている。

参考記事

ブログ - セキュリティ

Apache Tomcat のパス同等性の脆弱性(CVE-2025-24813)について観察された攻撃トラフィック、検出、および緩和策について説明します。 by ...

ソース: Akamai

SQAT® Security Report

一方で、サイバー攻撃も増加の一途をたどっています。例えば、不十分なセキュリティ対策が原. 因で、個人情報や取引先から預かった機密情報等を流出させてしまった ...


コラムニスト

エキスパート

関連ディスカッション

❖ 関連記事