Rails の深刻な脆弱性 CVE-2026-66066 が FIX:任意のファイル読み取りと RCE の恐れ

Critical Rails Flaw Lets Unauthenticated Attackers Read Server Files and Execute Code

2026/07/30 gbhackers — Ruby on Rails の Active Storage コンポーネントに存在する、深刻な脆弱性 CVE-2026-66066 を悪用する未認証の攻撃者は、脆弱なアプリケーション・サーバ上の任意ファイルを読み取り、リモートコード実行を引き起こす恐れがある。画像操作に libvips を使用するよう設定された、Rails アプリケーションにおける Active Storage のバリアント処理に、この脆弱性は影響を及ぼす。

2026年7月29日に、この問題を公表した Rails のメンテナたちが警告するのは、信頼されていないユーザーからの画像アップロードを受け付けるデプロイメントが、最も高いリスクにさらされる点である。

なお、管理者たちが影響を受けるシステムへのパッチを適用する前に、広範な悪用が発生するリスクを最小化するため、攻撃に関する技術的な詳細は、2026年8月28日まで非公開とされている。

Rails の重大な欠陥

この脆弱性は、Active Storage と libvips の相互作用に起因する。この画像処理ライブラリは、loaders/savers などのオペレーションを通じて、複数のファイル形式を処理する。

これらのオペレーションの一部には、サードパーティ・ライブラリによりサポートされるものもある。それらは、libvips により “unfuzzed” と分類されており、攻撃者が制御するコンテンツから呼び出されると危険であることを意味する。

以前の Active Storage は、これらの安全ではないオペレーションをブロックしていなかった。そのため、悪意を持って細工されたアップロードにより、バリアント処理中にそれらを発火させることが可能だった。研究者たちが示しているのは、標的となる Rails アプリケーション・プロセスからアクセス可能なファイルを開示する手法である。

露出するファイルには、プロセスの環境が含まれる可能性があり、きわめて深刻な下流リスクを生み出す。多くの Rails デプロイメントの環境変数には、アプリケーションの secret_key_base/クラウド・ストレージのアクセスキー/データベース認証情報/サードパーティ API トークン/デプロイメント・シークレットが含まれている。

攻撃者が secret_key_base へアクセスした場合には、署名済みデータの偽造や、セッション・セキュリティ侵害などが引き起こされる可能性がある。同様に、サービス認証情報が漏洩すると、クラウドリソース/データベース/外部プラットフォームなどへのアクセスが流出する可能性がある。

Rails が警告するのは、任意ファイル読み取りの脆弱性が、リモートコード実行/ラテラル・ムーブメントなどを引き起こし、広範なインフラ侵害を助長する可能性がある点だ。それらの被害は、アプリケーションが利用するシークレットに応じて異なるものとなる。

Rails アプリケーションが影響を受けるのは、libvips のコンフィグ設定が “config.active_storage.variant_processor = :vips” であり、信頼されていない画像アップロードを許可し、脆弱な Active Storage バージョンを実行しているケースとなる。

Rails load_defaults 7.0 を使用するアプリケーションで、libvips プロセッサがデフォルト・サポートになっているため、この問題は最近の広範な Rails 環境に関係する。

脆弱なバージョンに含まれるのは、Active Storage のバージョン 7.2.3.2 未満/8.0.0〜8.0.5.1 未満/8.1.0〜8.1.3.1 未満となる。管理者にとって必要なことは、露出しているアップロード・エンドポイントのインベントリと、Active Storage とシステムの libvips バージョンを速やかに確認することだ。

すでに Rails は、Active Storage のパッチ適用済みバージョンをリリースしており、安全な運用には libvips バージョン 8.13 以降が必要となる。それより前の libvips バージョンでは、安全ではないオペレーションを無効化できず、パッチ適用済み Active Storage は、安全ではないバージョンを検出すると起動に失敗する。

Rails を迅速にアップグレードできない組織において、libvips 8.13 以降が使用されている場合には、VIPS_BLOCK_UNTRUSTED 環境変数の設定が効果的となる。

ruby-vips 2.2.1 以降を使用しているデプロイメントでは、代替策として initializer から Vips.block_untrusted(true) を呼び出すことができる。古いバージョンの libvips を実行しているシステムには、その依存関係を削除する以外に安全な回避策はない。

なお、パッチ適用だけでは、すでに侵害された可能性のあるシークレットは無効化されない。Rails が推奨するのは、アプリケーション・プロセスにより読み取られる全シークレットを、潜在的に露出したものとして扱うことである。また、ローテーションの対象としては、secret_key_base/Rails master key/暗号化済み認証情報/クラウドストレージキー/データベースパスワード/サードパーティ・サービストークンなどが挙げられる。

secret_key_base を変更すると、アクティブ・セッション/署名済み cookies/署名済み Global IDs/Active Storage URLs が無効化されるため、ユーザーは再認証が必要となる。Ethiack と GMO Flatt Security の研究者が、この脆弱性を責任を持って報告した。