CVE-2026-66066
CVE-2026-66066 Vulnerability Report (KindaRails2Shell)
概要
| 項目 | 内容 |
|---|---|
| CVE番号 | CVE-2026-66066 |
| 通称 | KindaRails2Shell |
| GHSA | GHSA-xr9x-r78c-5hrm |
| 公開日 | 2026-07-29/30 |
| 最終更新 | 2026-07-30 |
| CVSS v4.0 | 9.5 (Critical) ※ paveg監査ツールは9.5を報告。GHSA Advisoryは"Critical"のみ表示、正確な小数点以下は要確認 |
| CVSS v4 Vector | AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H |
| CWE | CWE-1188 (Initialization of a Resource with an Insecure Default) |
| EPSS | 【情報不足】(公開時点では割り当てなし) |
| CISA KEV | なし (2026-07-30時点) |
影響を受けるソフトウェアおよびバージョン
| Rails バージョン | 影響 | 構成条件 | 推奨修正バージョン |
|---|---|---|---|
| ~< 6.0.0 | 対象外 | — | — |
| 6.0.0 〜 6.1.7.10 | 影響あり | Active Storageで非標準の設定が必要 | 7.2.3.2 |
| 7.0.0 〜 7.2.3.1 | 影響あり | Active Storageが有効(デフォルト) | 7.2.3.2 |
| 8.0.0 〜 8.0.5 | 影響あり | Active Storageが有効(デフォルト) | 8.0.5.1 |
| 8.1.0 〜 8.1.3 | 影響あり | Active Storageが有効(デフォルト) | 8.1.3.1 |
影響を受けるパッケージ: activestorage (RubyGems)
影響を受ける構成(全要件を満たす場合):
config.active_storage.variant_processor = :vipsが設定されている(Rails 7.0以降のデフォルト)- 信頼できないユーザーからの画像アップロードを許可している
- 環境内のlibvipsが特定のフォーマットを処理できる状態にある(Debian/Ubuntu、
rails new生成Dockerfileはデフォルトで該当)
技術詳細
脆弱性の概要
Ruby on RailsのActive Storageは、画像バリアント(サムネイル、リサイズ等)の生成にlibvipsを使用する。libvipsは「ローダー」と「セーバー」(一般に「オペレーション」)を通じてファイルフォーマットの読み書きを行う。これらの一部はサードパーティ製ライブラリに依存しており、libvipsは特定のオペレーションを "unfuzzed"(ファジング済みではない=信頼できないコンテンツに対して安全でない)としてマークしている。
Active Storageはデフォルト構成でこれらのunfuzzedオペレーションを無効化しておらず、攻撃者が細工されたファイルをアップロードしてバリアント生成をトリガーすることで、unfuzzedオペレーションの1つを呼び出し、サーバー上の任意のファイルを読み取ることができる可能性がある。
根本原因
根本原因分類: 初期化リソースの安全ではないデフォルト(CWE-1188)
| カテゴリ | 内容 |
|---|---|
| 欠落しているバリデーション | Active Storageがlibvipsのunfuzzedオペレーションを明示的にブロックしていなかった |
| 安全ではないデフォルト | load_defaults 7.0以降、variant_processorのデフォルトが:vipsに変更されたが、unfuzzedオペレーションのブロックは組み込まれていなかった |
| サードパーティライブラリ依存 | libvipsの一部のローダーは第三者ライブラリに依存し、web画像とは無関係なフォーマットも処理可能 |
libvips 8.13以降では VIPS_BLOCK_UNTRUSTED 環境変数でunfuzzedローダーをブロックできる機能が追加されたが、Active Storageはこの機能を利用していなかった。
攻撃フロー(公開されている情報の範囲)
[攻撃者] → 細工されたファイルをアップロード
↓
[Active Storage] → 画像バリアント生成をリクエスト
↓
[libvips] → unfuzzedオペレーションを呼び出し
↓
[任意ファイル読み取り] → サーバー上のファイル内容が露出
↓
[環境変数/secret_key_base窃取] → 認証情報の奪取
↓
[リモートコード実行(RCE)へ発展] → 複数の手法でRCEに繋がる可能性
⚠️ 重要: 研究者およびRailsチームは、攻撃チェーンの詳細な技術情報を意図的に公開していない(2026-08-28以降に公開予定)。上記は公開された概要情報のみを再構成したものである。
トリガー条件
本脆弱性が成立するためには以下の条件をすべて満たす必要がある:
- 条件1: Active Storageで
variant_processor = :vipsが使用されている(Rails 7.0以降はデフォルト) - 条件2: 信頼できないユーザーからの画像アップロードを許可している
- 条件3: 環境内のlibvipsが特定のunfuzzedフォーマットを処理できる(Debian/Ubuntu系はデフォルト該当)
- 条件4: 画像バリアント生成機能を利用している(または利用可能な状態)
Rails 6.xでは追加の非標準設定が必要。Rails 7.x/8.xでは一般的な構成で脆弱。
※ Rails 5.2〜5.xはvariant_processor設定が存在しないため対象外(ImageMagickのみ)。
PoC/Exploitの状況
| 項目 | 状況 |
|---|---|
| 公開PoC | なし(研究者が意図的に公開を保留) |
| 監査ツール | paveg/rails-activestorage-vips-audit — コードベースの脆弱性チェック用エージェントスキル |
| Exploit成熟度 | theoretical(攻撃チェーンは確認済みだが詳細非公開) |
| 信頼できるリポジトリ | 該当なし(PoC未公開のため) |
| Metasploitモジュール | なし |
研究者(Ethiack、GMO Flatt Security)は、AI等を活用することで数時間以内にPoCが作成される可能性が高いと事前検証で判断しており、影響環境では直ちに対応する必要があるとしている。
実被害・インシデント
現在のところ、実世界での悪用は確認されていない。
CISA KEVカタログにも未登録(2026-07-30時点)。The Hacker Newsは2026-07-29 17:30 UTCの時点で実被害の報告を確認していないと記載している。
ただし、CVSS v4.0が9.6 (Critical)であり、かつPoCが数時間以内に作成される可能性が高いと予測されているため、事前対応が強く推奨される。
検出方法
ブラックボックステスト(※ リモートからのブラックボックステストは確立されていない — 以下の手順はローカル構成確認用)
テスト用リクエスト・ペイロード
構成確認手順
-
Railsバージョンの確認:
bundle exec rails --version # または Gemfile.lock で activestorage のバージョンを確認 grep activestorage Gemfile.lock -
variant_processorの設定確認:
grep -r "variant_processor" config/ # デフォルト設定(load_defaults 7.0以降)であれば :vips が使用されている -
libvipsバージョンの確認:
vips --version # 8.13未満の場合、unfuzzedローダーのブロック機能なし -
Active Storage使用の有無:
grep -r "has_one_attached\|has_many_attached" app/models/
ホワイトボックステスト
ソースコード上の脆弱パターン
# ❌ 脆弱な構成(Rails 7.2.3.1以前)
config.active_storage.variant_processor = :vips
# unfuzzedオペレーションのブロックなし
# ✅ 修正後の構成(Rails 7.2.3.2以降)
# Active Storage内部で unfuzzed オペレーションが自動的にブロックされる
修正パッチの動作
修正版のActive Storageは、libvipsのunfuzzedオペレーションを自動的に無効化する。libvips < 8.13 の環境では起動時に例外を発生させ、セキュア化できない環境であることを明示する。
対策
恒久的対策
Railsを修正版にアップデート:
| 現在のバージョン | アップデート先 |
|---|---|
| 7.2.x | 7.2.3.2 |
| 8.0.x | 8.0.5.1 |
| 8.1.x | 8.1.3.1 |
| 6.x | 7.2.3.2(非標準設定でのみ影響) |
# Gemfileを更新
gem "rails", "~> 7.2.3.2" # または 8.0.5.1 / 8.1.3.1
bundle update rails activestorage
libvipsのアップデート: libvips >= 8.13 必須。8.13未満はunfuzzedオペレーションのブロック機能を持たないため、Active Storageが起動時に例外を発生させる。
秘密鍵のローテーション(必須):
アップグレードは脆弱性を閉じるが、すでに流出したsecretは無効化しない。以下のsecretをすべて変更する必要がある:
secret_key_baseconfig/master.keyおよびRAILS_MASTER_KEYconfig/credentials.yml.encで暗号化された全資格情報- Active Storageサービスの認証情報(S3、GCS、Azureキー等)
- データベース認証情報
- 第三者サービスのトークン/キー
secret_key_base の変更により、アクティブなセッションは全て失効し、ユーザーは再ログインが必要となる。暗号化Cookie、署名付きCookie、署名付きGlobal ID、Active Storage URLも影響を受ける。
暫定対策・軽減策
方法1: VIPS_BLOCK_UNTRUSTED 環境変数(libvips >= 8.13)
# 環境変数を設定
export VIPS_BLOCK_UNTRUSTED=1
# または .env / systemd / Dockerで設定
libvips 8.13以上であれば、環境変数の設定だけでunfuzzedオペレーションをブロックできる。
方法2: ruby-vips initializer(ruby-vips >= 2.2.1 + libvips >= 8.13)
# config/initializers/vips.rb
Vips.block_untrusted(true)
方法3: Active Storageの無効化(影響が限定的な場合)
Active Storageを使用していない、または画像分析のみで使っている場合:
# Gemfileから ruby-vips を削除(Active Storage不使用の場合)
# または variant_processor を :mini_magick に変更
config.active_storage.variant_processor = :mini_magick
WAFによる緩和
WAFによる緩和策は存在するが、効果は極めて限定的である。Active Storageの保存先やファイルのアップロード方式、アプリケーション構成に大きく依存するため、WAFを修正の代替として使用してはならない。
修正パッチ詳細
⚠️ 技術詳細保留中: Railsチームおよび発見者である研究者は、攻撃チェーンの詳細を意図的に公開していない。これはパッチ適用前の環境への攻撃を遅らせるための方針である。詳細は2026-08-28までにRails Security Announcementsフォーラムで公開予定。
既知の修正内容:
activestorageの内部で、libvipsのunfuzzedオペレーションを自動的に無効化- libvips
< 8.13の環境では起動時に例外を発生(セキュア化不可能な環境の明示) - 【情報不足】修正コミットSHAは現時点で公開されていない。GHSA-xr9x-r78c-5hrmのReferencesセクションには技術詳細の公開予定日(2026-08-28までに)と研究者ブログのみが記載されている
再現環境
現時点で公開された再現環境は確認されていない。研究者がPoCを公開していないため、Docker等での公式な再現手順は存在しない。
脆弱性の検証には以下の構成が必要:
# 概念的な脆弱環境の構成(実際の攻撃コードは含まない)
FROM ruby:3.3-slim
RUN apt-get update && apt-get install -y libvips-dev
WORKDIR /app
COPY Gemfile Gemfile.lock ./
RUN bundle install
# Active Storage + vips variant processor を使用したRailsアプリ
参考資料
公式情報源
- GitHub Advisory: GHSA-xr9x-r78c-5hrm
- Rails Discuss: CVE-2026-66066 公式アナウンス
- libvips 8.13リリースノート: unfuzzedローダーのブロック
技術分析
- GMO Flatt Security Blog: KindaRails2Shell 概要と対応指針(日本語)
- Ethiack: KindaRails2Shell 英語レポート
- The Hacker News: Critical Rails Flaw Coverage
- W.A. Arbaugh et al., "Windows of Vulnerability: A Case Study Analysis"
PoC/Exploit
- paveg/rails-activestorage-vips-audit — 脆弱性監査エージェントスキル
- ※ PoC exploitは現在公開されていない(研究者が意図的に保留)
変更履歴
| 日付 | 変更内容 |
|---|---|
| 2026-07-30 | 初版作成 — 公開時点の情報に基づく。技術詳細は保留中(2026-08-28公開予定) |
脆弱性情報(NVD)
- CWE: CWE-1188
- EPSS: 1.70%(上位 25.0%)
原文: Action Pack is a framework for handling and responding to web requests. In versions prior to 7.2.3.2, 8.0.5.1 and 8.1.3.1, Active Storage does not disable libvips operations marked unsafe for untrusted content, allowing a crafted upload to invoke such an operation. Consuming applications are affected when configured to use libvips and accept image uploads from untrusted users. An unauthenticated attacker may exploit this behavior to read arbitrary files accessible to the Rails process, including environment variables and application secrets. Exposure of credentials such as secret_key_base or external-service tokens may enable remote code execution or lateral movement. This issue has been fixed in versions 7.2.3.2, 8.0.5.1 and 8.1.3.1.
攻撃成立条件
- アプリケーションがActive Storageの画像処理にlibvipsを使用するよう設定されている。
- 未認証または信頼できないユーザーが画像をアップロードできる機能が公開されている。
- 使用しているAction Pack(Rails)のバージョンが、7.2.3.2未満、8.0.5.1未満、8.1.3.1未満のいずれかである。
- 攻撃者が、安全でないlibvips操作(任意ファイル読み取りを可能にする操作)を誘発するよう細工した画像ファイルをアップロードし、アプリケーションに処理させることができる。