「画像をアップロードさせるだけ」でシェルが取れる #
2026年7月29日、Ruby on Railsのセキュリティチームが CVE-2026-66066 を公開した。Active Storage の variant(サムネイル等の派生画像)処理が、画像処理ライブラリ libvips に未検証のアップロードをそのまま渡してしまい、未認証の攻撃者が画像を1つアップロードして variant 生成をトリガーするだけでサーバー上の任意ファイル読み取りとリモートコード実行が成立する。GitHub の採点は CVSS v4 で 9.5、研究者コミュニティは "KindaRails2Shell" と呼んでいる。
厄介なのは前提条件の薄さだ。Active Storage の direct upload はデフォルトで認証なしに使える設計のため、管理画面もログインフォームも無いアプリケーションですら影響を受けうる。
Rails プロセスの環境変数ごと読めるため、secret_key_base・マスターキー・DBパスワード・S3等クラウドストレージの認証情報・APIトークンが根こそぎ漏れる。

なぜこの脆弱性クラスは繰り返すのか #
これは目新しい攻撃ではない。2016年に ImageMagick を揺るがした「ImageTragick」と本質的に同じ構造で、「画像処理ライブラリに未検証の入力をそのまま渡す」パターンが繰り返し牙を剥いている。libvips 側は安全性未検証のローダーを無効化する仕組みを持っていたが、Active Storage 側がそれを呼び出していなかった。画像は「ただのデータ」ではなく「パーサーに食わせるコード」だという認識が、フレームワーク層でも徹底されていなかったことになる。
影響を受けるのは activestorage 7.2.3.2 未満、8.0系は8.0.5.0以下、8.1系は8.1.3.0以下(いずれもデフォルト設定)。6.x系もvipsプロセッサを手動有効化していれば対象になる。

対応: アップデートだけでは終わらない #
修正版は 7.2.3.2 / 8.0.5.1 / 8.1.3.1。ただし libvips 8.13 以上でないとパッチが機能しないため、gemだけでなくOS側のlibvipsバージョンも要確認だ。
この脆弱性はアップロード1回で秘密鍵一式を読める性質上、侵害の痕跡がなくても「既に読まれた」前提で動くのが定石。secret_key_base やマスターキー、DB・クラウドストレージの認証情報を含む全シークレットのローテーションが推奨されている。パッチを当てて安心せず、variant生成周りの異常なアップロード履歴も点検したい。
COMMENTS 0
No comments yet — be the first to leave one.