Anoymask

KindaRails2Shell (CVE-2026-66066): Active Storageアップロード経由の任意ファイル読み取りとRCE

1. 基本情報

2. ワンセンテンスサマリー

Active Storageのダイレクトアップロードとlibvipsによるバリアント処理を組み合わせた脆弱性であり、攻撃者は認証なしで細工されたファイルをアップロードし、サーバー上のファイルや認証情報を読み取り、条件次第でRailsプロセス権限でのコード実行を可能にする。

3. 攻撃フロー

  1. 攻撃者は対象のRailsアプリがActive Storageを使用していることを発見または推測する。
  2. 攻撃者は認証不要のダイレクトアップロード機能に細工されたファイルを登録する。
  3. 攻撃者は脆弱なActive Storageおよびデフォルトビルドのlibvipsで処理されるバリアント処理をトリガーする。
  4. 攻撃者はサーバー上の任意ファイルを読み取る。
  5. 攻撃者はRailsシークレット、クラウド認証情報、データベース認証情報、その他の機密データを取得する。
  6. 攻撃者は取得したシークレットや処理チェーンを利用してリモートコード実行を達成する可能性がある。
  7. 攻撃者は次のステップとしてデータベース、ストレージ、クラウド環境、またはCI/CDパイプラインへの横移動を試みる可能性がある(推測)。

4. 攻撃者の位置と実行場所

攻撃者は外部ネットワークからHTTP経由でファイルをアップロードする。処理はRailsアプリケーションサーバーとlibvipsプロセス上で行われる。リモートコード実行はRailsまたはバリアント処理サービスのOS権限で実行される。

5. 被害者と管理者が目にするもの

  • ユーザー向けのアップロード画面がなくても、Active Storageが有効になっていれば脆弱になる可能性がある。
  • 管理者はログにダイレクトアップロード、blob作成、バリアントリクエスト、libvips例外、ファイルアクセスを確認できる場合がある。
  • 通常の画像処理のように見えるため、WAFだけで検知するのは困難である。

6. 成功・失敗条件

成功条件

  • Active Storageが有効になっている。
  • バリアントプロセッサが:vipsに設定されている。
  • libvipsがディストリビューションパッケージなどからのデフォルトビルドを使用している。
  • 脆弱なバージョンが使用されている(7.2.3.2より前、8.0〜8.0.5.1、または8.1〜8.1.3.1)。

失敗条件

  • 修正版に更新されている。
  • libvips/ruby-vips条件に対する公式ワークアラウンドが適用されている。
  • ダイレクトアップロードとバリアント処理が停止されている、またはネットワークアクセスが制限されている。
  • シークレットがファイルから分離され、最小権限の原則に従っている。

7. 成功時に起こること

サーバー上のファイルや認証情報が漏洩し、リモートコード実行、データベース侵害、クラウドリソースの悪用、ソースコードや顧客データの窃取につながる。JPCERT/CCは、読み取り可能なすべての認証情報を侵害されたものとして変更することを推奨している。

8. 観測可能なログ

  • メール: 通常なし。
  • プロキシ/SWG/DNS: アプリサーバーから未知の宛先への後続トラフィック、パッケージやツールのダウンロード。
  • エンドポイント/EDR: Rails/libvipsによる異常なファイルアクセス、子プロセス、シェル、シークレットファイルの読み取り。
  • Identity/IdP: アプリシークレット、クラウドキー、データベース認証情報の異常使用。
  • SaaS/Cloud: オブジェクトストレージのblob/バリアント、Secrets Manager、クラウド監査ログ。
  • ネットワーク: ダイレクトアップロード、細工されたblob、バリアント処理リクエスト、リモートコード実行後のアウトバウンドトラフィック。

9. 攻撃成功の判定

  • 接触のみ: 対象エンドポイントのプロービング。
  • ユーザーアクション: 不要。
  • 初期実行: 細工されたblobの登録とバリアント処理。
  • マルウェアまたは認証成功: 任意ファイル読み取り、シークレットの使用、子プロセスの実行。
  • データ窃取 / セッション侵害: シークレット、データベース、クラウドデータへの異常アクセス。
  • 後期侵害の確認: Webシェル、永続化プロセス、新規キー、データベース改ざん、外部へのデータ漏洩。

10. 調査プレイブック

  • トリガー: 脆弱なバージョンの検知、PoC風のアップロード、libvipsの異常、シークレットファイルへのアクセス。
  • 初期確認: Rails、activestoragelibvipsruby-vipsのバージョン、:vips設定、ダイレクトアップロードの到達性を確認。
  • エンドポイント: Web、Rails、Active Storageのログ、blob、バリアント、プロセス、ファイル監査を保全。
  • 認証とクラウド: Rails認証情報、環境変数、データベース、S3を含むすべてのシークレットの異常使用を確認。
  • 後続アクション: 新規プロセス、cronジョブ、サービス、Webシェル、アウトバウンドトラフィック、データアクセスを追跡。
  • 封じ込め: ソフトウェアの更新、必要に応じた機能停止、影響を受けたホストの隔離、読み取り可能なすべての認証情報の失効とローテーション、既知の良好なバージョンからの再構築。
  • 判定カテゴリ: 脆弱 / 探索済み / 悪意あるアップロード / ファイル読み取り / 認証情報使用 / RCE / 下流侵害。

11. 防御と検知のアイデア

  • 単一イベント: ダイレクトアップロード直後の異常バリアント、libvipsによるシークレットファイルへのアクセス、Railsによるシェルの起動。
  • タイムライン相関: Blob作成 → バリアント処理 → シークレットファイル読み取り → 新規認証 → アウトバウンドトラフィック。
  • 脅威ハンティング: すべてのインターネット向けRailsアプリケーションでActive Storage設定と過去のblob/バリアントリクエストを横断確認。
  • ログ不足: オブジェクトストレージとファイルアクセス監査がなければ、ファイル読み取りの成否を判断するのは困難。
  • 優先対策: ソフトウェア更新、シークレットの安全な管理、最小権限の適用、アップロード制限。更新の代わりにWAFに依存しない。

12. 事実 / 推測 / 仮説

事実

  • JPCERT/CCは公開PoCを確認し、広範な悪用可能性について警告した。
  • ユーザー向けアップロード機能がなくても、ダイレクトアップロードに認証がないため標的となり得る。
  • JPCERT/CCは読み取り可能なすべての認証情報を変更することを推奨した。

推測

  • Railsアプリケーションに高いクラウド権限がある場合、リモートコード実行前にファイル読み取りだけで深刻なクラウド侵害につながる可能性がある。

仮説

  • Active Storageイベントとホストファイルアクセスログを組み合わせることで、WAFより高い精度で成功を判定できる。

13. MITRE ATT&CKマッピング

  • 高信頼性: T1190 パブリック向けアプリケーションの悪用、T1005 ローカルシステムからのデータ収集、T1552.001 ファイル内の認証情報。
  • 中信頼性: T1059 コマンドおよびスクリプトインタープリタ、T1078 有効なアカウント、T1105 イングレスツール転送、T1041 C2経由の漏洩。

14. 不明点と追加調査

  • 実際の悪用の有無と開始時刻
  • PoCの正確なファイル形式とリクエストシーケンス
  • リモートコード実行に必要な読み取り範囲と完全な前提条件
  • ホスティングサービスおよび派生フレームワークへの影響

15. SOCおよび組織への影響

RailsはWebサービスで広く使われており、目に見えるアップロード機能がなくても標的となり得るため、重大なリスクとなる。組織はGem lockfileとランタイム設定を資産インベントリと照合し、侵害を想定して認証情報をローテーションする必要がある。

16. 役割別サマリー

  • SOC向け: アップロード、バリアント、シークレット読み取り、認証使用を相関させる。PoC公開後のすべての履歴ログを調査する。
  • 管理者向け: Railsおよびlibvipsの依存関係を確認し、更新して読み取り可能なすべてのシークレットをローテーションする。
  • ユーザー向け: ユーザーアクションは不要。異常を発見した場合は管理者に報告する。