注意まだ起きていない

Rails Active Storage に重大な欠陥 画像のアップロードでファイルを書き込まれうる

Ruby on Rails の activestorage で、ImageMagick(mini_magick)で画像を扱うアプリが、ログインなしのアップロードでサーバーにファイルを書き込まれうる。CVSS 9.8。8.1.4.1・8.0.5.2 で修正。

要点

  • Ruby on Rails のファイルを扱う部品 Active Storage に欠陥が見つかり、細工したファイルを1つアップロードされるだけで、サーバーに勝手にファイルを書き込まれうる。
  • 当たるのは、ImageMagick で画像を扱い、その安全の設定で危ない読み方を止めておらず、だれでもファイルを上げられるアプリで、この3つがそろうとログインしていない攻撃者にも狙われうる。
  • Rails は 2026年11月4日に直した版(8.1.4.1 と 8.0.5.2)を出したが、8.0 より古い版には直した版が出ない。

何が起きたか

Rails の開発チームは 2026年11月4日、Active Storage の欠陥についての advisory(安全上の注意の知らせ)を出した。番号は GHSA-f3w6-w445-fwh9 だ。CVE の番号はまだ付いていない。危なさの点数は CVSS(欠陥の重さを0〜10で表す目安)で 9.8、「Critical(重大)」とされている。

Active Storage は、利用者が上げた画像やファイルを保存し、扱うための Rails の部品だ。画像の大きさを調べたり、縮小した画像を作ったりするのに、外のソフトの ImageMagick を呼ぶことがある。

攻撃者に要るのは、細工したファイルを1つ上げることだけだ。Active Storage は、ファイルが添付されるとすぐに、その画像の情報を調べに行く。縮小画像を作るといった操作を待たずに、ImageMagick がファイルを開くことになる。ImageMagick は、ファイルの形式を中身から判断する。形式によっては、画像そのものではなく、画像の中で指定された別のファイルを読み書きする。advisory によると、Active Storage はそうした形式を使わせない手立てを取っていなかった。その結果、サーバーにファイルを書き込まれるおそれがあった。

保存先がサーバーのディスク(Disk サービス)の場合、被害は書き込みだけにとどまらない。アプリの権限で読めるファイルを、攻撃者に読まれるおそれもある。advisory が例に挙げるのは、secret_key_base(Rails がログインの情報などを守るのに使う秘密の鍵)と、外のサービスにつなぐための認証情報だ。これらが漏れると、サーバーで勝手にプログラムを動かされたり、つながったほかのシステムに入り込まれたりしうるという。

報告したのは、HackerOne(欠陥を報告して報酬を受ける仕組み)の研究者 ryotak だ。Rails のチームは、報告された攻撃の道筋が唯一のものとは考えていないとしている。advisory には、実際に悪用されたという記述はない。

同じ日に、もう1つの欠陥(GHSA-v924-7rp8-4mxh、CVSS 8.8)も直された。上げたファイルの名前の拡張子で、動画や画像を扱うソフトの読み方を攻撃者が選べてしまうものだ。こちらは研究者 pirikara が報告した。

日本の利用者への影響

日本でどれだけ当たるアプリがあるか、日本の組織に被害が出ているかは、資料からは分からない。

当たるかどうかは、アプリの作りで決まる。advisory によると、次の3つが全部そろうと当たる。

  • 画像の処理に ImageMagick を使っている(古い設定のまま作られたアプリでは、これが標準)
  • ImageMagick の安全の設定が、危ない読み方を止めていない(Debian や Ubuntu が配る設定では止まっていないとされる)
  • 知らない人からのファイルのアップロードを受け付けている

新しめの設定で作ったアプリは、標準では別の画像ソフト(libvips)を使う。この場合、1つ目の条件に当たらない。

今すぐやること

  1. 自社や取引先のサービスに Rails で作ったものがあるか、開発の担当者や委託先に確かめる。
  2. 画像のアップロードを受け付けていて、ImageMagick を使っているかを確かめてもらう。
  3. 当たるなら、Rails を 8.1.4.1 か 8.0.5.2 に上げる。8.0 の安全のための修正は 2026年11月7日で終わるので、Rails のチームの方針に沿って 8.1 への移行も考える。
  4. すぐ上げられないときは、Rails のチームの勧めに沿って、ImageMagick の設定で危ない読み方を止める。
  5. 保存先がサーバーのディスクなら、Rails のチームは、秘密の鍵や、アプリが読めるパスワード・認証情報をすべて新しいものに変えるよう勧めている。

背景

ImageMagick は多くの形式を読めるぶん、中にはファイルを読み書きする機能を持つ形式もある。2016年には「ImageTragick」と呼ばれる一連の欠陥が見つかり、多くの Web サービスが急いで対策した。その時から、ImageMagick の安全の設定(policy.xml)で危ない形式を止めることが勧められてきた。

今回の advisory は、欠陥の種類を「安全でない初期設定」としている。Active Storage が ImageMagick の初期設定をそのまま使っていたことが原因だ。直した版では、Rails が自分で安全の設定を持ち込む。

Rails では 2026年7月にも、別の画像ソフト libvips を使う経路の欠陥(CVE-2026-66066)が直されている。

技術者向けの詳細
  • 対象: activestorage 8.1 以上 8.1.4.1 未満、8.0.5.2 未満(8.0 より古い系列は直した版が出ない)
  • 直した版: 8.1.4.1、8.0.5.2。すぐ上げられない場合の修正コミット: 468aa9a(8.1)、ea8c401(8.0)
  • 条件: config.active_storage.variant_processor = :mini_magick(load_defaults 6.1 以前の標準)/ImageMagick の policy が該当の coder を拒否していない/信頼できない利用者のアップロードを受け付ける。添付だけで解析が走る
  • 直した版で :mini_magick を使うなら mini_magick 5.1 以上が要る(古いと起動時に例外)
  • 当たるかの確かめ方の例:
grep -E '^    (activestorage|mini_magick) ' Gemfile.lock
grep -rn 'variant_processor\|load_defaults' config/
magick -list policy   # ImageMagick 6 なら convert -list policy
  • 上げられないときの回避策(advisory): 同梱の activestorage/lib/active_storage/image_magick/policy.xml の規則を、システムの policy(例 /etc/ImageMagick-7/policy.xml)に写す。最低でも MSL coder、gs delegate、Ghostscript を使う coder(PS・PDF・EPS・XPS・PCL など)を拒否する
  • 同梱の policy は MiniMagick.cli_env 経由で渡される。そのため、次のどれかに当たるアプリでは効かず、規則を host 側の policy に置く必要がある: 起動後の cli_env の上書き/cli_prefix による環境の除去/独自の MiniMagick::Shell。GraphicsMagick は ImageMagick の policy を読まないので、この仕組みの外になる
  • 同梱の policy は gs と Ghostscript 系の coder を拒否する。ImageMagick で PostScript・PDF を描画しているアプリは、host の policy.xml で、使うものだけを許可し直す
  • Disk サービスを使うアプリ: アプリのプロセスが読める秘密は、すべて入れ替えの対象(例: config/credentials.yml.enc の中身と master key、secret_key_base、DB やストレージ、外部サービスの認証情報)。古い値は残さない。詳しくは advisory の Mitigation を参照
  • 関連の GHSA-v924-7rp8-4mxh(CVSS 8.8、要ログイン相当の PR:L): 一時ファイルが元の拡張子を保つため、ffprobe・ffmpeg・ImageMagick の読み方を拡張子で選ばれうる。AviSynth を有効にした FFmpeg(ffmpeg.org の GPL ビルドなど)では、ファイルの読み出しやコード実行のおそれ。回避策は VideoPreviewer・VideoAnalyzer・AudioAnalyzer を外すこと。修正コミット 72136ff(8.1)、8106938(8.0)

出典

一次情報

報道

参考

記事は、運営者が生成 AI を活用して作成し、内容を確かめたうえで公開しています。 誤りに気づいたら編集方針の連絡先へ。

次に読む

同じタグの記事