脆弱性・CVE速報深刻度: 緊急

Pillow の EPS 処理で Ghostscript に引数を差し込める不具合、条件がそろうとコマンド実行の恐れ(CVE-2026-112900): 13.0.0 で修正

目次(5)

CVE-2026-112900

Python の画像ライブラリ Pillow で、EPS 画像を Ghostscript で描画するときに、ファイル名の先頭が - や @ だと Ghostscript への「引数」として解釈されてしまう不具合(CVE-2026-112900、GHSA-w889-685w-c8fh)が公開されました。GitHub の深刻度は Critical で、修正版は 13.0.0(PyPI 10/16 UTC 公開)、勧告の公開は 10/21 です。CISA の KEV には、確認した範囲では載っていません。

何が起きるか

  • Pillow は EPS を開くとき、外部プログラム Ghostscript を呼び出します。その際、Image.open() に渡されたファイル名を、そのまま -f <ファイル名> の位置に入れていました。
  • ファイル名が - で始まると、Ghostscript はそれをファイル名でなくオプションとして読みます。1 つの引数の差し込みは、常に成立すると勧告は説明しています。
  • ファイル名が @ で始まると、Ghostscript は「そのファイルから追加の引数を読む」という記法として扱います。差し込む側が、その参照先の内容も用意できれば、複数の引数を一度に渡せます。勧告は、この経路で OS コマンドの実行まで届くことを、既定の -dSAFER を付けた呼び出しでも再現したとしています(勧告の記載で、当サイトでは再現していません)。
  • 問題はファイルの中身(PostScript)ではなく、ファイル名です。無害な EPS でも、ファイル名を攻撃者が左右できれば成立します。

影響を受ける版と条件

項目内容
対象Pillow 2.6.0 以上 13.0.0 未満(GitHub、NVD とも同じ範囲)
修正版13.0.0
弱点CWE-88(引数の区切りの不適切な処理)、CWE-78(OS コマンドインジェクション)
評価GitHub 提供の CVSS v4.0 は 9.2。NVD の評価は v3.1 で 9.8(Critical)
前提Ghostscript が入っていて EPS を開く構成。攻撃者がファイル名を左右できること
  • 前提の「ファイル名を左右できる」は、アップロードされたファイルを、利用者が付けた名前のまま(または名前を元にして)保存して開く構成が当てはまります。名前を自動で決めたり、一時ファイルを経由したりしている場合は、この経路には当たりにくいと考えられます(本記事の推定)。
  • コマンド実行まで進むには、@ で始まる名前に加えて、参照先のファイルの中身も攻撃者が用意できる必要があると、NVD の説明にあります。
  • NVD の評価(v3.1)は攻撃元区分が「ネットワーク」、権限・利用者の操作は不要です。これらの前提条件が付くため、実際の危険度は構成によって大きく変わります。

修正の中身

修正コミット a2c3631(10/01 UTC)は、Ghostscript に渡す前にファイル名を os.path.abspath() で絶対パスに変えます。先頭が /(Windows ではドライブ文字)になるので、- や @ で始まる名前が引数として読まれなくなります。あわせて、-h という名前の EPS を開いても Ghostscript のヘルプが出ないことを確かめる試験が足されています。修正の差分は 1 か所の小さな変更で、差分から確認できる範囲では上記のとおりです。

対応

  1. Pillow を 13.0.0 以上に更新します。pip show pillow や依存の固定ファイルで版を確かめられます。
  2. すぐ更新できない場合は、Image.open() に渡す前に、ファイル名を絶対パスに直す、または利用者が付けた名前を使わず自分で決めた名前で保存する、といった対策が考えられます(本記事の推定で、勧告が示す回避策ではありません)。
  3. 信頼できない EPS を受け付けない、または Ghostscript を使う EPS の描画を無効にする方法もあります。Pillow の方針では、信頼できない EPS を避けることが以前から勧められています。ただし勧告は、今回の不具合はその注意だけではカバーされないと説明しています。
  4. アップロードされたファイルを開いている処理があるサーバーで、@ や - で始まる名前のファイル、心当たりのない Ghostscript の起動がないかを確認します。

未確認の点

  • NVD の状態は Analyzed(10/27 更新)です。CVSS v3.1 の 9.8 は NVD、v4.0 の 9.2 は GitHub の評価で、数値が異なります。
  • EPSS は 1.30%(10/30 時点、百分位 0.70)です。悪用の報告は見つかっておらず、KEV 掲載もなしです。
  • 修正コミット(10/01 UTC)から勧告の公開(10/21)まで約 3 週間あります。この間の経緯は未確認です。
  • 勧告は「長く存在する不具合で、現行の全版に影響しそう」と書いていますが、NVD の範囲は 2.6.0 からです。2.6.0 より前の版の影響は未確認です。
  • 実際の環境での再現は確認していません。記載は勧告、NVD、修正コミットに基づきます。

この記事について

出典

この記事を共有