OPSWATレッドチームが実施した包括的なセキュリティ分析を通じて、セキュリティ研究者のThai DoとMinh Phamは、Rack Rubyフレームワークに影響を及ぼす複数の脆弱性、特にCVE-2025-25184、CVE-2025-27111、CVE-2025-27610を特定しました。
この記事では、CVE-2025-27610 を中心に、これらの脆弱性の詳細な概要を説明します。根本的な原因を検証し、潜在的な影響を評価し、Rack フレームワークに依存するアプリケーションをセキュアにするための効果的な緩和策を概説します。
ラックの概要
Rackは、ウェブサーバとRubyベースのウェブアプリケーションを接続するモジュール式のインターフェイスです。HTTPリクエストとレスポンスを単一のメソッド呼び出しにラップすることで、これらのコンポーネント間のインタラクションを標準化し、開発プロセスを簡素化し、さまざまなフレームワークやサーバ間の互換性を促進します。
Rackは、Ruby on RailsやSinatraなど、多くのRuby Webフレームワークやライブラリで使用されている。RubyのGemとして提供されています。全世界で10億ダウンロードを超えるRackの世界的な普及は、Ruby開発のエコシステムにおけるRackの重要な役割を浮き彫りにしています。Rack::StaticやRack::Sendfileなどのミドルウェアコンポーネントは、静的コンテンツの配信を処理し、ファイル転送を最適化することで効率を高めます。このように広範に統合されているため、Rack で発見された脆弱性は、世界中の多くのアプリケーションやシステムに影響を与える可能性があり、セキュリティに大きな影響を与えます。
ラックにおけるセキュリティ脆弱性の発見
OPSWAT 研究者であるThai DoとMinh Phamは、Rackミドルウェア・フレームワークに関する最近のセキュリティ研究の中で、RubyベースのWebアプリケーションに重大なセキュリティリスクをもたらすいくつかの脆弱性を特定した:
- CVE-2025-25184:Thai Do さんが、攻撃者が CRLF (Carriage Return Line Feed) 文字を介してログインジェクションを実行し、ログエントリを操作できる可能性のある脆弱性を発見しました。
- CVE-2025-27111:Minh Pham さんが、悪意のあるヘッダー値を通して、攻撃者がログの内容を注入したり操作したりできるようにするセキュリティ上の欠陥を発見しました。
- cve-2025-27610:この脆弱性により、攻撃者は指定された静的ファイルディレクトリの外部にあるファイルに不正にアクセスすることが可能となり、重大なセキュリティ脅威となります。
これらの脆弱性のうち、CVE-2025-27610は特に深刻で、認証されていない攻撃者が設定ファイル、認証情報、機密データなどの機密情報を取得し、データ侵害につながる可能性があります。この脆弱性はCVSSスコア7.5に分類され、深刻度の高いリスクに分類されています。
Rack::Static およびローカルファイル包含の脆弱性
Rack::Static を理解する
Rack::Staticは、主にJavaScriptやCSS、画像などの静的ファイルを効率的に提供するために使用される、Rackアプリケーションに不可欠なミドルウェアです。Rack::Staticを活用することで、開発者はウェブサーバの追加設定に依存することなく、静的コンテンツ配信をRubyアプリケーションにシームレスに統合することができます。
Rack::Staticを設定する際、:urlsと :rootという2つの重要なオプションが目立ちます。これらのオプションを正しく理解し使用することで、静的ファイルの提供プロセスが大幅に簡素化され、効率化されます。
1.urlsオプション
:urls オプションは、Rack アプリケーションが静的アセットとして扱う URL パスを指定します。これは文字列の配列として提供され、それぞれが静的ファイル処理のトリガーとなるパスのプレフィックスを表します。
例えば、こうだ:
この設定では、 /images、/css、/jsへのリクエストはRack::Static によってインターセプトされ、処理されます。これらのパスにマッチするファイルは、ファイルシステムから直接提供されます。
2.ルート・オプション
root オプションは、静的ファイルを提供するベースとなるディレクトリを定義します。このディレクトリは Rack アプリケーションの現在の作業ディレクトリからの相対パスです。
先ほどの例で考えると
/assets/logo.png へのリクエストが行われると、Rack::Static はpublic/assets/logo.png にあるファイルを提供しようとします。
実例
Rack::Staticを:urlsオプションと:rootオプションを通して効果的に実装することで、Rubyウェブアプリケーション内で静的コンテンツを提供するための整理されたパフォーマンスの高い方法を提供します:
このシナリオでは、/assets/* と /favicon.ico へのリクエストは自動的に Rack::Static によって処理されます。対応するファイルはすべて、それぞれ public/assets ディレクトリと public/favicon.ico に存在する必要があります。
CVE-2025-27610 技術的詳細
Rack::Static の広範なセキュリティ分析中に、Minh Pham は :root オプションの不適切な処理に関連する重大な脆弱性を発見した。具体的には、:root パラメータが明示的に定義されていない場合、Rack はこの値を Dir.pwd の値として現在の作業ディレクトリにデフォルト設定し、Rack アプリケーションの Web ルートディレクトリとして暗黙的に指定します。
重要なことに、Rack::Static は十分な検証やサニタイズを行うことなく、入力された URL のパスを指定された :root ディレクトリに直接連結してしまいます。その結果、:root オプションが未定義であったり、:urls オプションに対する設定が誤っていたりすると、認証されていない攻撃者がこの脆弱性を悪用し、パストラバーサルテクニックによって意図したウェブディレクトリ外の機密ファイルにアクセスする可能性があります。
以下のセクションでは、Rack::Static のリクエスト処理プロセスを詳細に分析し、この脆弱性がどのように悪用されるかを明確に示します。
Rack::Static におけるパストラバーサルおよびローカルファイル包含の脆弱性
Rack::Static ミドルウェアがどのようにリクエストを処理するのかをより深く理解するために、Minh Pham 氏は Rack のソースコードを徹底的に分析しました。Rack::Staticクラスの初期化において、:rootオプションが明示的に定義されていない場合、Rack::Staticはデフォルトで現在の作業ディレクトリ(Dir.pwd)からファイルを提供することを確認しました。その結果、このオプションを省略すると、ミドルウェアはアプリケーションの実行元ディレクトリを暗黙的に使用することになります。
初期化後、Rack::Static が HTTP リクエストを受信すると、呼び出しメソッドが呼び出されることがわかりました。
その後、Rack::Static は Rack::Files にファイル提供の処理を委譲し、Rack::Files は設定された :root ディレクトリとユーザが提供する PATH_INFO から導き出される構築されたファイルパスに基づいて、ファイルを探して提供しようとします。
まず、can_serve(path)とoverwrite_file_path(path)というメソッドを呼び出すことで、ミドルウェアはenv["PATH_INFO"]を調べて、入ってくるリクエストが設定されたURLプレフィックス(/staticや/publicなど)にマッチするかどうかを判断する。
この条件が満たされた場合、Rack::Static は設定されたルートディレクトリ (:root) とユーザが提供した PATH_INFO を組み合わせてファイルパスを構築します。この構築は、入力パスの適切な正規化やサニタイズなしに行われます。具体的には、ミドルウェアは入力されたリクエストの PATH_INFO と :root オプションで指定されたディレクトリを直接結合します。
Minh Pham 氏は、このワークフローで適切なサニタイズまたは検証が行われていないため、ユーザーが提供する PATH_INFO にディレクトリトラバーサルシーケンスが含まれており、:root オプションが明示的に定義されていない場合、構築されたファイルパスが意図したルートディレクトリ以外の場所に解決され、機密ファイルが公開される可能性があることを発見した。
CVE-2025-27610 概念実証
Rack::Static のこの脆弱性を実証するために、Ruby ベースの Web アプリケーションを開発し、Rack バージョン 3.1.10 を利用しました。アプリケーションが :root オプションを明示的に定義していないシナリオでは、認証されていない攻撃者がこの脆弱性を悪用して、認証情報、設定ファイル、データベースファイルなどの機密データにアクセスし、重大なデータ漏洩につながる可能性があります。
この脆弱性に関連する重大な影響の詳細については、以下のビデオをご参照ください:
緩和と指導
上記で説明した脆弱性を軽減するために、お使いのシステムを Rack の最新バージョンにアップデートしてください。
SBOMエンジンを使用するMetaDefender Core 、この脆弱性を検出することができます。
OPSWAT MetaDefender Coreは、先進的なSBOMSoftware Bill of Materials:Software 部品表)機能を備えており、セキュリティリスクに対処するためのプロアクティブなアプローチをとることを可能にします。ソフトウェアアプリケーションとその依存関係をスキャンすることにより、MetaDefender Core 、リストされたコンポーネント内のCVE-2025-27610、CVE-2025-27111、CVE-2025-25184のような既知の脆弱性を特定します。これにより、開発チームとセキュリティチームは、パッチの適用に優先順位をつけることができ、悪意者に悪用される前に潜在的なセキュリティリスクを軽減することができます。
以下は、MetaDefender Core SBOMで検出したCVE-2025-27610、CVE-2025-27111、CVE-2025-25184のスクリーンショットです: