ImageMagick の脆弱性 CVE-2025-53101 が FIX:RCE の可能性に事実上の PoC の提供

ImageMagick Vulnerability Enables RCE via Malicious File Name Patterns

2025/07/15 gbhackers — ImageMagick の画像処理ライブラリに発見された、深刻な脆弱性を悪用する攻撃者は、細工されたファイル名テンプレートを用いることで、リモート・コード実行の可能性を手にする。この脆弱性 CVE-2025-53101 は、MagickCore/image.c モジュールにおける、スタックバッファ・アンダーフローに起因する。具体的に言うと、magick mogrify コマンドで使用されるファイル名パターンに対して、フォーマット指定子を繰り返して書き込む攻撃者は、内部のポインタ演算を誤らせることで、スタックバッファ境界のバイパスを達成する。それにより、任意のコード実行が可能となる。

この脆弱性の深刻度は High (CVSS v3.1:8.1) と評価されており、ImageMagick 7.1.1-47 未満/6.9.13-25 未満のバージョンに影響を及ぼすが、すでにバージョン 7.1.2-0/6.9.13-26 で修正されている。

この脆弱性は、ファイル名テンプレート内の “%d” “%o” “%x” などのフォーマット指定子を、InterpretImageFilename() が処理する方法に起因する。

イメージの展開時において、この関数は、各フォーマット・パターンが4文字分を占めるという静的オフセット調整を用いて、書き込み位置を計算する。

しかし、フォーマット指定子が連続し、区切りがない状況においては、このオフセット補正がオーバーシュートし、意図したバッファよりも手前のメモリが、ポインタ演算により参照されるという可能性が生じる。

その後に呼び出される vsnprintf() により、このアンダーフロー領域にデータが書き込まれ、スタックバッファ・オーバーフローが発生し、RCE にいたる恐れが生じる。

以下は、CVE およびその主要なメトリクスの概要だ:

CVE IDDescriptionSeverityAffected VersionsPatched VersionsCVSS v3.1 Score
CVE-2025-53101Stack buffer underwrite in filename processingHigh< 7.1.1-47, < 6.9.13-257.1.2-0, 6.9.13-268.1

前述のとおり、この脆弱性は、オフセット変数の処理に存在する、誤ったロジックに起因する。つまり、実際の文字数ではなく、想定されるフォーマット長に基づく定数により、このオフセット変数は増加していくことになる。

この誤った計算は、magick mogrify ユーティリティに対して、”%d%d” のような入力値を用いる場合に顕著になる。この入力により、オフセット値が安全な範囲を超えてしまい、境界外への書き込みが発生する。テスト環境でメモリ・バグ検査ツール AddressSanitizer を用いることで、この問題が検出された。

したがって、対象システム上で magick コマンドを実行できるリモート攻撃者であれば、この脆弱性の悪用は容易である。つまり、悪意のファイル名テンプレートを指定する攻撃者は、スタックを破損し、任意のペイロードへと実行フローを誘導できるようになる。

ただし、現時点においては、そのためのエクスプロイト・コードは存在しない。その一方で、AddressSanitizer で確認されたクラッシュは、事実上の PoC でもあり、この脆弱性の深刻さを裏付けている。Ubuntu 22.04 LTS 上で gcc 11.4.0 を使用したラボテストでは、”magick mogrify %d%d” を実行するだけで、オーバーフローが確実に再現され、クラッシュが発生したという。

すでに、この脆弱性は、ImageMagick のメンテナたちにより修正されている。具体的には、テンプレートの長さと実際の出力との差に応じて、補正値を動的に計算するよう、オフセット調整のロジックが再設計されている。それに加えて、書き込まれるバイト数に対する、境界チェックも導入されたという。さらに、検証機能も追加されたことで、フォーマット処理の失敗や過剰な書き込み試行が発生した際に、処理が中断されるようになった。

ユーザーに対して強く推奨されるのは、修正済みのリリース 7.1.2-0/6.9.13-26 へと、速やかにアップグレードすることである。その一方で、管理者にとって必要となるのは、ImageMagick を実行している全システムで脆弱なバージョンを監査し、 修正済みバージョンへと更新することである。

運用におけるベスト・プラクティスは、ファイル名テンプレートに使われる信頼できない入力に対する、サニタイズの実施と厳格な制限である。また、magick コマンドの異常な呼び出しパターンを継続的に監視することも、攻撃の試みの検出において有効である。