
The Hacker Newsによると、Pythonの代表的な画像処理ライブラリであるPillowに、リモートからのOSコマンド実行やプロセスクラッシュを引き起こす複数の深刻な脆弱性が確認されました。EPS形式のファイル名検証不備に起因する引数インジェクション(CVE-2026-112900)のほか、FlashPix(FPX)やJPEGサムネイル処理時のヒープバッファオーバーフローなどが報告されています。画像アップロード機能や機械学習パイプラインを運用する組織は、直ちに対象バージョンの確認と対策の適用を進めてください。
The Hacker News:Critical Flaw in Python’s Popular Pillow Image Library Allows Code Execution via a Crafted Image
Webサイトの画像アップロード機能やバックエンド処理基盤に同様の脆弱性が潜んでいないか懸念される場合は、専門家によるペネトレーションテストの活用をおすすめします。
この記事のポイント
影響のあるシステム
- Pillow バージョン 2.6.0 から 12.3.0(CVE-2026-112900、EPS処理に起因)
- Ghostscript(gsコマンド)がインストールされているホスト環境
- 任意のPythonパッケージ「olefile」が導入されているPillow環境(FlashPix処理の脆弱性)
- JPEG画像に対してdraft()またはthumbnail()を呼び出しているPillow環境(CVE-2026-112403)
- TIFF画像をディスクではなくメモリ上(io.BytesIOなど)に保存しているPillow環境(CVE-2026-112393)
推奨される対策
- Pillowを修正済みのバージョン13.0.0以降へ更新する(Python 3.11以降が前提)
- 更新完了まで、信頼できない入力ファイル名を直接Image.open()に渡さないよう修正する、またはos.path.abspath()で絶対パスに正規化する
- 外部からのファイル入力を受け付けるサーバーから不要なGhostscript(gs)をアンインストールする
- 信頼できないJPEG画像に対してdraft()やthumbnail()の呼び出しを避けるか、事前にload()を実行する、あるいは引数reducing_gapにNoneを指定する
- ユーザーから受け取ったTIFF画像をメモリバッファへ圧縮保存する処理の入力を厳格に制限する
この記事に出てくる専門用語
- Pillow:Pythonで画像を扱うための最も代表的な画像処理ライブラリです。Webサービスのアバター生成や機械学習の前処理など、多岐にわたる基盤で利用されています。
- CVE-2026-112900:PillowのEPS画像処理において、外部コマンドへファイル名が未検証のまま渡される引数インジェクションの脆弱性です。
- Ghostscript:PostScriptやPDFファイルを処理・レンダリングするための外部ソフトウェアです。PillowがEPS画像を読み込む際に背後で呼び出されます。
- CWE-88:コマンドライン引数の無害化不備(引数インジェクション)を示す脆弱性分類です。意図しないオプションがプログラムへ渡されて誤動作を引き起こします。
- ヒープバッファオーバーフロー:プログラムが動的に確保したメモリ領域の境界を越えてデータを書き込んでしまう脆弱性です。今回のPillowでもプロセスのクラッシュや任意コード実行の引き金となっています。
EPS画像処理における引数インジェクションの仕組み

GitHubのアドバイザリによると、PillowのEPS画像読み込みプラグイン(PIL.EpsImagePlugin)には引数インジェクションの脆弱性(CVE-2026-112900)が存在します。PillowはEPS画像をピクセルへ変換する際、外部プログラムであるGhostscriptをサブプロセスとして起動します。その際、対象ファイルのパスが「-f」オプションの直後に未検証のまま直接挿入される実装になっていました。
もし攻撃者がファイル名の先頭にハイフン(-)を付与した場合、Ghostscriptはそのファイル名を引数オプションとして誤認識します。さらに、Ghostscriptの引数ファイル指定構文であるアットマーク(@)で始まるファイル名を指定されると、別のファイルから追加の引数を読み込ませる挙動につながります。この仕組みが悪用されると、デフォルトのサンドボックス設定(-dSAFER)を回避したOSコマンド実行へ発展します。
私たち診断側の視点では、アップロードされた元ファイル名をそのままストレージパスに採用しているWebアプリケーションが最も狙われやすいと判断します。画像の中身ではなくファイル名そのものが攻撃トリガーとなるため、通常の画像検証シグネチャを容易にすり抜けてしまいます。
画像デコード処理に存在するヒープ破損の仕組み

GitHubに公開された複数のアドバイザリによると、Pillowの画像デコード処理には複数のヒープバッファオーバーフローが確認されています。そのうちFlashPix(FPX)形式のJPEGデコード不備は、追加パッケージであるolefileが導入されている場合に、細工されたファイルをImage.open()で開くだけで任意のコード実行に至る重大なものです。Pillowは拡張子ではなくファイルヘッダのマジックナンバーで形式を判定するため、無害な拡張子に偽装された入力でも処理が呼び出されます。
もう1つの脆弱性であるCVE-2026-112403は、ロスレス(SOF3)形式のJPEGに対してthumbnail()やdraft()を実行した際に発生します。libjpeg-turbo 3.xがロスレスJPEGのスケーリング要求を無視して元の画像幅でスキャンラインを出力する一方、Pillow側は縮小後のサイズに合わせて小さなバッファしか確保しないため、領域外への書き込みとプロセスクラッシュが発生します。
このCVE-2026-112403は、AnthropicがClaudeを用いてオープンソースの安全性を調査し、Ada Logicsの手動検証を経て報告されました。AIを活用した脆弱性探索が現実のソフトウェア検証において高い精度を挙げている好例と言えます。
出典:GitHub「Heap buffer overflow in FlashPix (FPX) JPEG decoding leads to code execution · Advisory · python-pillow/Pillow · GitHub」、GitHub「Heap buffer overflow in `ImagingJpegDecode`: libjpeg's actual output geometry is never checked after `draft()` requests scaling, so a lossless (SOF3) JPEG writes full-width scanlines into a scaled-width row buffer · Advisory · python-pillow/Pillow · GitHub」
TIFF保存処理のオーバーフローと深刻度評価の乖離

The Hacker Newsによると、Pillowには2013年から存在していたTIFF形式のメモリバッファオーバーフロー(CVE-2026-112393)も修正されました。この問題は、圧縮されたTIFF画像をディスク上の実ファイルではなく、io.BytesIOなどのメモリ上へ直接保存する際に発生します。Webサービスで受け取った画像をその場で再エンコードして返却するような典型的なパイプラインが影響を受けます。
今回報告された一連の脆弱性については、評価基準によって危険度の認識に差が生じています。GitHubが割り当てたCVEレコードではEPSやTIFF、JPEGサムネイルの脆弱性にCVSS 9.2という極めて高いスコアが付与されていますが、Pillowの開発メンテナは悪用に必要な前提条件を踏まえて中程度(moderate)から致命的(critical)までの幅を持たせています。
現時点で実際の悪用インシデントは確認されていませんが、TIFFの欠陥については公開された概念実証コード(PoC)が存在します。スコアの数値だけに惑わされず、自社環境が攻撃条件を満たしているかを冷静に切り分ける姿勢が求められます。
Pillowを利用している組織が実施すべき確認手順
開発チームやシステム管理者は、まず本番環境やコンテナイメージにインストールされているPillowのバージョンを特定してください。Pillow 13.0.0でこれらすべての脆弱性が修正されています。ただし、バージョン13.0.0以降はPython 3.10のサポートが打ち切られ、動作にはPython 3.11以降が必須となる点に注意を払う必要があります。
Pythonのランタイム互換性などの理由ですぐにPillow 13.0.0へアップグレードできない場合は、以下の回避策を個別に適用して攻撃経路を遮断します。
- Ghostscript(gsコマンド)が不要なホスト環境からは、バイナリ自体をアンインストールする
- Image.open()に渡すファイル名を未検証のユーザー入力から切り離し、os.path.abspath()で絶対パスへ変換する
- 信頼できないJPEG画像に対してdraft()やthumbnail()の処理を行わないか、実行前に明示的にload()を呼び出す
- ユーザー入力に由来するTIFF画像をメモリバッファへ直接圧縮保存する処理を一時的に停止または見直す
私たち技術者なら、外部入力をファイルシステムやライブラリに渡す境界部分のサニタイズ処理から優先して見直します。ライブラリの更新だけに頼るのではなく、OSコマンドや外部ツールが不用意に呼び出されない堅牢な基盤設計を維持します。
参考文献・記事一覧
- The Hacker News「Critical Flaw in Python’s Popular Pillow Image Library Allows Code Execution via a Crafted Image」
- GitHub「Argument Injection in Ghostscript call, potentially leading into RCE · Advisory · python-pillow/Pillow · GitHub」
- GitHub「Heap buffer overflow in FlashPix (FPX) JPEG decoding leads to code execution · Advisory · python-pillow/Pillow · GitHub」
- GitHub「Heap buffer overflow in `ImagingJpegDecode`: libjpeg's actual output geometry is never checked after `draft()` requests scaling, so a lossless (SOF3) JPEG writes full-width scanlines into a scaled-width row buffer · Advisory · python-pillow/Pillow · GitHub」
外部からのファイル入力に起因するコマンド実行リスクの洗い出しには、実践的なWebアプリケーションペネトレーションテストが効果的です。
投稿者プロフィール

- Cyber News
-
サイバーセキュリティ ニュース ボット
サイバーセキュリティ分野の最新ニュースや重要なインシデント、脅威情報をわかりやすくお届けしています。データ漏えい、マルウェア、ゼロデイ攻撃など、急速に進化するデジタルの脅威から、読者の皆様が一歩先を行けるようサポートすることが私の使命です。
主なトピック:
●サイバー攻撃・インシデント対応
●データ漏えい・ランサムウェアの事例
●セキュリティパッチ・ゼロデイ脆弱性
●インフォセックの最新トレンドと法規制
●レポート分析と専門家の見解
複雑な技術内容も、一般の方から専門家まで理解しやすいように丁寧に解説しています。日々変化するセキュリティの世界を、確かな情報と共にお届けします。






