Ruby on Rails Active StorageにCritical脆弱性CVE-2026-66066、画像アップロードから任意ファイル読み取り・RCEの可能性

この記事は約16分で読めます。

Ruby on RailsのActive Storageに、細工した画像ファイルのアップロードを起点として、サーバー上の任意ファイルを読み取られる可能性がある脆弱性CVE-2026-66066が確認されました。GitHub Security Advisoryは深刻度をCritical(重大)、CVSS v4.0の基本値を9.5と評価しています。任意ファイル読み取りによってRailsの秘密情報や外部サービスの認証情報が漏えいした場合、リモートコード実行(RCE)や他システムへの横展開に発展する可能性があります。

影響を受けるのは、Active Storageの画像処理にlibvipsを使用し、信頼できない利用者から画像を受け付けるRailsアプリケーションです。Rails 7.0以降ではlibvipsを利用する:vipsがデフォルトの画像変換プロセッサー(variant processor)となっており、一般的な構成でも影響を受ける可能性があります。Rails 6.xについては、Active Storageをデフォルトとは異なる構成で使用している場合に影響する可能性があると発見者が説明しています。

修正版はRails 7.2.3.2、8.0.5.1、8.1.3.1です。ただし、Railsまたはactivestorageを更新するだけでは不十分で、libvips 8.13以上とruby-vips 2.2.1以上が必要です。JPCERT/CCはエクスプロイトコードの公開を確認しており、影響を受ける可能性がある環境では、更新とあわせてサーバープロセスから読み取り可能な認証情報を漏えい済みとして扱い、変更することを推奨しています。

CVE-2026-66066の全体像

項目 内容
CVE番号 CVE-2026-66066
通称 KindaRails2Shell
影響コンポーネント Ruby on RailsのActive Storage
脆弱性の中核 libvipsの信頼できない入力向けではない処理をActive Storageが無効化していなかった問題
深刻度 Critical(重大)
CVSS CVSS v4.0: 9.5
攻撃条件 libvipsを利用した画像処理と、信頼できない利用者からの画像アップロードが可能な構成
主な影響 サーバー上の任意ファイル読み取り、認証情報の漏えい、RCE、外部システムへの横展開
修正版 Rails 7.2.3.2、8.0.5.1、8.1.3.1
追加要件 libvips 8.13以上、ruby-vips 2.2.1以上
公開状況 JPCERT/CCがエクスプロイトコードの公開を確認
推奨対処 修正版への更新、libvipsとruby-vipsの更新、読み取り可能な秘密情報の変更

Active Storageとlibvipsが担う役割

Active Storageは、Ruby on Railsに組み込まれたファイル添付機能です。画像、文書、動画などをローカルディスクやAmazon S3、Google Cloud Storage、Microsoft Azure Storageなどへ保存し、アプリケーションのモデルと関連付けて管理できます。

画像を扱うアプリケーションでは、アップロードされた原本からサムネイルやプロフィール画像などの派生画像を作成するvariant機能が使用されます。Railsはこの画像変換処理を外部ライブラリへ委ねており、主な画像変換プロセッサーとして、libvipsを利用する:vipsと、ImageMagick系を利用する:mini_magickがあります。

Rails 7.0のデフォルト設定では、Active Storageの画像変換プロセッサーとして:vipsが選択されます。libvipsは高速かつ省メモリな画像処理ライブラリとして広く利用され、Railsの公式DockerイメージやDebian・Ubuntu系の一般的な構成でも採用されています。

今回の脆弱性は、libvipsそのものに新たなメモリ破壊が見つかったという問題ではありません。libvipsが信頼できない入力へ使用すべきではないと分類している処理を、Active Storageが無効化せずに利用できる状態にしていたことが原因です。

脆弱性の原因 — 安全性未確認の処理(unfuzzed operations)を無効化していなかった

libvipsは、画像形式の読み込みと書き出しを、読み込み処理(loader)と書き出し処理(saver)によって実行します。これらの一部は外部ライブラリに依存し、一般的なWeb画像以外の形式も扱います。

libvipsは、十分なファジングテストが行われておらず、信頼できないコンテンツに対して安全とはみなせない処理をunfuzzedまたはuntrustedとして分類しています。こうした処理は、管理者が信頼できるファイルを変換する用途では利用できても、不特定の利用者が送信したファイルへ適用するべきではありません。

CVE-2026-66066では、Active Storageがlibvipsを初期化する際に、このunfuzzed operationsを無効化していませんでした。そのため、攻撃者が細工したファイルをアップロードし、Active Storageの処理経路へ到達させることで、本来は信頼できない入力に使用すべきではない処理を呼び出せる可能性がありました。

Rails公式アドバイザリは、細工したファイルを通じてRailsアプリケーションのプロセスから読み取り可能な任意ファイルを漏えいさせる攻撃経路が報告されたと説明しています。攻撃チェーンの詳細は、未更新環境への攻撃を容易にするため、2026年8月28日まで非公開とされています。

任意ファイル読み取りからRCEへ発展する理由

脆弱性の直接的な影響は、Railsアプリケーションの実行ユーザーが読み取れるファイルやプロセス環境の漏えいです。しかし、Railsアプリケーションでは重要な秘密情報が環境変数や設定ファイルに保存されていることが多く、ファイル読み取りだけで影響が完結するとは限りません。

Rails公式は、特にsecret_key_baseやマスターキー、外部サービスの認証情報が読み取られる可能性を挙げています。これらの秘密情報を取得されると、署名付きデータの偽造、暗号化された認証情報の復号、クラウドストレージやデータベースへの不正アクセスなどへ発展する可能性があります。

漏えいした情報とアプリケーションの構成によっては、Railsアプリケーション内での任意コード実行や、接続先のデータベース、クラウドサービス、外部APIなどへの横展開が可能になります。このため、GitHub Security AdvisoryのCVSS v4.0評価では、脆弱なRailsシステムだけでなく、後続システムの機密性、完全性、可用性にも高い影響が設定されています。

すべての影響環境で同じ手順により直ちにRCEが成立するわけではありません。利用している認証方式、保存されている秘密情報、デプロイ方法、クラウド権限、セッション管理などによって、攻撃後の影響は異なります。一方、サーバー上の秘密情報を読み取られる可能性がある時点で、単純な画像処理エラーとして扱うべき問題ではありません。

影響を受けるための条件

Rails公式アドバイザリは、影響を受けるアプリケーションの条件として、次の2点を挙げています。

  • libvipsを使用:Active Storageの画像処理にconfig.active_storage.variant_processor = :vipsを使用している
  • 信頼できない利用者からの画像入力:外部の利用者が画像をアップロードできる

これに加えて、発見者のEthiackは、環境内のlibvipsが攻撃に利用できる特定の外部ライブラリとリンクされていることも条件として挙げています。Debian、Ubuntu、Rails公式Dockerfileを基にした一般的な環境は影響する可能性があると説明されています。

画像のvariantをアプリケーションが明示的に生成する機能を実装していない場合でも、安全とは限りません。Rails公式は、variant生成を別個の追加条件とはしていません。また、JPCERT/CCはActive Storageのダイレクトアップロード(direct upload)機能にデフォルトで認証が存在しないため、管理画面やAPIなどの明示的なアップロード画面を持たないアプリケーションでも、Active Storageを有効にしている場合は影響対象となる可能性があると注意喚起しています。

プロフィール画像、アバター、商品画像、投稿への画像添付、問い合わせフォーム、サポートチケット、チャットなど、外部利用者が画像を送信できる機能は確認対象です。アップロード機能が認証後の利用者だけに提供されていても、不特定多数がアカウントを作成できる場合や、低権限ユーザーが利用できる場合は、実質的な攻撃対象になり得ます。

Railsのバージョンごとに異なる影響条件

GitHub Security Advisoryはactivestorageの影響範囲を広く示していますが、発見者の調査ではRailsの世代によって標準構成での影響が異なります。

Railsのバージョン 影響 主な条件 推奨更新先
6.0.0未満 発見者の整理では対象外 対象外 サポート中の安定版への移行を推奨
6.0.0〜6.1.7.10 構成によって影響 Active Storageをデフォルトとは異なる構成で使用し、信頼できない画像を受け付ける場合 サポート終了済み。7.2.3.2以上のサポート対象系列へアップグレード
7.0.0〜7.1.6 影響あり 一般的な:vips構成でActive Storageを有効にし、信頼できない画像を受け付ける場合 サポート終了済みで個別修正版なし。7.2.3.2以上へアップグレード
7.2.0〜7.2.3.1 影響あり 一般的な:vips構成でActive Storageを有効にし、信頼できない画像を受け付ける場合 7.2.3.2以上
8.0.0〜8.0.5 影響あり 一般的な:vips構成でActive Storageを有効にし、信頼できない画像を受け付ける場合 8.0.5.1以上
8.1.0〜8.1.3 影響あり 一般的な:vips構成でActive Storageを有効にし、信頼できない画像を受け付ける場合 8.1.3.1以上

Rails公式は2025年10月にRails 7.0と7.1のサポート終了を発表しており、両系列にはCVE-2026-66066向けの個別修正版は提供されていません。Rails 6.xもサポート対象外です。これらの系列を利用している場合は、Active Storageだけを部分的に置き換えるのではなく、7.2.3.2以上のサポート対象系列へのアップグレードを計画してください。

Rails 7.xと8.xでは、load_defaults 7.0によって:vipsが標準の画像変換プロセッサーに設定され、その後のデフォルトでも維持されています。そのため、Rails 7以降でActive Storageを利用している環境は、独自設定を行っていなくても確認が必要です。

:mini_magickを画像変換プロセッサーとして使用し、ruby-vipsやlibvipsをアプリケーションへ組み込んでいない環境は、今回の攻撃経路の影響を受けません。ただし、:mini_magickを使用していてもruby-vipsが依存関係に残っている場合、修正版Railsの起動時チェックやuntrusted operationsの無効化がプロセス全体に適用されます。

修正版への更新にはlibvipsとruby-vipsの確認が必要

根本的な対策は、Railsまたはactivestorageを7.2.3.2、8.0.5.1、8.1.3.1以降へ更新することです。修正版では、Active Storageの起動時にVips.block_untrusted(true)を呼び出し、libvipsがunfuzzedまたはuntrustedと分類する読み込み処理と書き出し処理を無効化します。

この修正を有効にするため、Railsはlibvips 8.13以上とruby-vips 2.2.1以上を新たな最低要件としています。これより古いバージョンはuntrusted operationsを無効化できないため、ruby-vipsがインストールされている状態で最低要件を満たさない場合、修正版Active Storageは安全でない状態で動作を続けず、起動時にRuntimeErrorを発生させます。

Railsだけを先に更新すると、本番環境の再起動時にアプリケーションが起動しない可能性があります。更新前にOSパッケージまたはコンテナイメージに含まれるlibvipsと、Gemfile.lockに記録されたruby-vipsのバージョンを確認してください。

コンテナ環境では、Ruby gemの更新だけでなく、ベースイメージやパッケージレイヤーのlibvipsも更新する必要があります。ビルド時には新しいlibvipsが使用されていても、古いコンテナイメージを再利用していると実行環境へ反映されないため、イメージの再ビルドと再デプロイ後に実際のバージョンを確認してください。

更新後は一部の画像形式が処理できなくなる

修正版は、信頼できない入力に対して安全性が確認されていない画像処理を無効化します。この変更はセキュリティ上必要ですが、従来処理できていた一部の画像形式で動作が変わる可能性があります。

Railsのリリースノートでは、BMP、ICO、PSDのvariant変換でVips::Errorが発生する可能性があると説明されています。また、SVG、JPEG XL、JPEG 2000、Netpbmなどを含む一部形式では、画像解析時に幅と高さが記録されなくなる場合があります。unfuzzedな出力形式を指定した変換もエラーになります。

ファイルの添付、保存、ダウンロードそのものは変更されません。影響するのは主に画像解析とvariant変換です。アプリケーションがリクエスト処理中に画像変換を実行している場合は、変換エラーが利用者へのエラーレスポンスとして現れる可能性があります。バックグラウンドジョブで変換している場合は、ジョブの失敗として記録されます。

独自に特殊な画像形式を許可しているアプリケーションでは、修正版を検証環境へ適用し、アップロード、サムネイル生成、メタデータ取得、既存画像の再処理を確認してください。安全でない読み込み処理や書き出し処理を安易に再有効化すると脆弱性対策を無効にする可能性があるため、業務要件を確認した上で対象形式を制限する方が安全です。

更新だけでは漏えい済みの秘密情報を無効化できない

修正版への更新は新たな攻撃を防ぎますが、過去に読み取られた秘密情報を無効化するものではありません。Rails公式とJPCERT/CCは、影響を受ける環境ではアプリケーションプロセスから読み取り可能な秘密情報を漏えい済みとして扱い、変更するよう求めています。

確認と変更が必要な主な情報は次のとおりです。

  • secret_key_base:Railsの署名や暗号化処理に使用する秘密情報
  • Railsマスターキー:config/master.keyまたはRAILS_MASTER_KEYとして提供される鍵
  • credentials.yml.enc内の情報:マスターキーで復号できるデータベース、API、外部サービスなどの認証情報
  • Active Storageの認証情報:Amazon S3、Google Cloud Storage、Microsoft Azure Storageなどのアクセスキー
  • データベース認証情報:ユーザー名、パスワード、接続文字列、証明書
  • 外部サービスのトークン:メール配信、決済、監視、CI/CD、OAuth、Webhookなどで使用する鍵やトークン

secret_key_baseを変更すると、既存のアクティブセッションは無効になり、利用者は再ログインが必要になります。暗号化Cookie、署名付きCookie、署名付きGlobal ID、Active Storageの署名付きURLにも影響します。

秘密情報のローテーションで旧キーをフォールバックとして残すと、漏えいしたキーが引き続き利用できる可能性があります。Rails公式は、ローテーションを一時的な移行手段としてのみ使用し、最終的に漏えいした可能性がある秘密情報を完全に無効化するよう案内しています。

直ちに更新できない場合の軽減策

libvips 8.13以上を使用している環境では、環境変数VIPS_BLOCK_UNTRUSTEDを設定することで、untrusted operationsを無効化できます。ruby-vips 2.2.1以上を使用している場合は、初期化ファイル(initializer)からVips.block_untrusted(true)を呼び出す方法もあります。

libvips 8.13未満では、untrusted operationsを無効化する機能自体がありません。この場合、libvipsを更新するか、アプリケーションからruby-vipsとlibvipsへの依存を取り除く以外に、Rails公式が示す回避策はありません。

Active Storageを使用していないにもかかわらず、画像解析のためだけにruby-vipsをGemfileへ追加しているアプリケーションでは、依存関係を削除できる場合があります。:mini_magickを使用しておりruby-vipsが不要な場合も、依存関係から削除することで修正版の起動時要件を避けられます。

WAFで特定のアップロードを遮断する方法は、ファイルの保存先、アップロード方式、direct uploadの利用状況などに依存します。GMO Flatt SecurityとEthiackは、WAFによる緩和策の効果は限定的であり、修正版への更新の代替にはならないと説明しています。

エクスプロイトコード公開後の確認事項

JPCERT/CCは、CVE-2026-66066のエクスプロイトコードがすでに公開されていることを確認しています。Rails公式の完全な技術説明は2026年8月28日まで保留されていますが、修正差分、公開アドバイザリ、第三者の検証情報から攻撃手法が再現される可能性があります。

現時点のRails公式、JPCERT/CC、発見者資料は、実環境での悪用を確認したとは説明していません。一方、JPCERT/CCは影響する可能性がある環境に対し、侵害を受けたことを前提とした対応と、侵害有無の調査を検討するよう呼びかけています。

更新時には、次の項目を確認してください。

  • Active Storageの利用:モデルの添付設定、direct upload、画像variant、プレビュー、解析処理の有無を確認する
  • 画像変換プロセッサー::vipsか:mini_magickかを確認する
  • アップロード経路:プロフィール画像、投稿、問い合わせ、API、direct uploadなど外部から画像を受け付ける経路を洗い出す
  • 依存バージョン:Rails、activestorage、libvips、ruby-vipsの実行環境上のバージョンを確認する
  • 秘密情報:Railsプロセスから読み取り可能な環境変数、設定ファイル、マウント済みシークレットを確認する
  • アクセス履歴:不審な画像アップロード、Active Storage関連のエラー、異常なvariant生成、外部サービスへの不審なアクセスを調査する
  • 更新後の検証:アプリケーション起動、アップロード、画像解析、variant生成、既存画像の表示を確認する

Active Storageを使用するRails 7.xまたは8.x環境では、利用者向けの画像アップロード機能がないという理由だけで対象外と判断しないことが重要です。direct uploadの到達性、ルーティング、認証、ストレージ設定を含めて確認し、影響を否定できない場合は修正版へ更新してください。

一次情報・公式情報

Possible arbitrary file read and remote code execution in Active Storage variant processing(Ruby on Rails、2026年7月29日)
CVE-2026-66066 Security Announcement(Ruby on Rails Discussions)
Ruby on Rails 7.2.3.2 Release
Ruby on Rails 8.0.5.1 Release
Ruby on Rails 8.1.3.1 Release
Ruby on RailsのActive Storageにおけるリモートコード実行につながる脆弱性(CVE-2026-66066)に関する注意喚起(JPCERT/CC、2026年7月30日)
Active Storage Overview(Ruby on Rails Guides)

参考情報

深刻度「緊急」のRails脆弱性「KindaRails2Shell」(CVE-2026-66066)の概要と対応指針(GMO Flatt Security、2026年7月30日)
KindaRails2Shell – Critical RCE in Rails via Active Storage(Ethiack、2026年7月29日)
Critical Rails Flaw Could Let Unauthenticated Attackers Read Server Files via Image Uploads(The Hacker News、2026年7月29日)

コメント

タイトルとURLをコピーしました