Pythonで画像を扱うときによく使われるライブラリ「Pillow」が、10月16日に13.0.0を出しました。リリースノートには、セキュリティの修正が38項目並びます。GitHubのAdvisory Databaseは10月20日、そのうちJPEGの縮小の処理のバッファ超過(CVE-2026-112403)を、CVSS 4.0で9.2の「Critical」と評価しました。
Pillowは、Webサイトで上げた画像の縮小版を作る処理や、文書の取り込み、AIの前処理などで広く使われます。社内のシステムや委託先が作ったアプリに、知らないうちに入っていることもあります。この記事の内容は、10月21日にGitHubの勧告とPillowのリリースノートで確かめたものです。
13.0.0のセキュリティの修正は38項目
Pillow 13.0.0のリリースノートのセキュリティの一覧(CriticalとHighの部分)出典: Pillow「13.0.0 (2026-10-16) Release notes」(引用)
Pillowのリリースノートは、セキュリティの修正を深刻度ごとに分けています。1つの項目に複数の勧告がまとまったものもあり、勧告の番号(GHSA)では42件です。CVEの番号は、決まり次第足すとしています。
| Pillowの評価 |
項目の数 |
主な中身 |
| Critical |
2 |
モードを変えたあとの古い画像の領域の再利用、JPEGの読み込みのバッファ超過 |
| High |
13 |
WMF・EMF、TIFF、PDF、JPEGの書き込みなど、形式ごとの範囲外の読み書きや資源の使い切り |
| Medium |
20 |
展開の爆弾の確かめの抜け、PDFやGIFの処理の時間の膨張、EPSの引数の差し込みなど |
| Low |
3 |
GIFやEPSの展開の爆弾の確かめの抜け、ImageMorphの範囲外の書き込み |
範囲外の読み書きやメモリの使い切りなど、細工したファイルを読み込ませると、プロセスが落ちたり、メモリが壊れたりする種類が中心です。
GitHubが「Critical」とした JPEGの縮小の処理
GitHubの勧告(CVE-2026-112403)。対象は12.3.0以前、修正版は13.0.0出典: GitHub Advisory Database「GHSA-8g5g-8vmr-9782」(引用)
GitHubの勧告によると、CVE-2026-112403は、JPEGの画像を縮小して読み込む処理のバッファ超過です。
- Image.thumbnail()は、読み込む前にdraft()で、1/2・1/4・1/8に縮小して読むよう指示します。
- 可逆圧縮の(lossless)JPEGでは、使う部品のlibjpeg-turbo 3系が縮小を受け付けず、元の幅のまま行を返します。
- Pillowは縮小した幅の分しか領域を取っていないため、その外に書き込んでしまいます。
勧告は、Pillowの公式の配布物(wheel)に入っているlibjpeg-turbo 3.0以上で起きるとしています。libjpeg-turbo 2系や、IJGのlibjpegで作ったものは対象外です。画像は規格どおりのJPEGなので、形式をJPEGに限っても防げないとしています。
一方で、open()のあとload()で読み込む処理や、resize()は影響を受けません。すぐに上げられない場合の回避策として、thumbnail()の前にload()を呼ぶか、thumbnail()にreducing_gap=Noneを渡す方法を挙げています。深刻度は、CVSS 4.0で9.2です。
もう1件のCVE-2026-112397は、幅が0の画像をImageMorph.MorphOp.apply()に渡すと、範囲外に書き込む不具合です。Pillowの評価はLowですが、GitHubはCVSS 4.0で8.7の「High」としました。信頼できない画像に形態の処理をかけるアプリが当たり、プロセスが落ち、メモリが壊れる恐れがあるとしています。
12系の修正版は無い Python 3.10は対象外に
2件の勧告とも、対象は12.3.0以前、直った版は13.0.0です。12系の修正版は示されていません。
13.0.0は、Python 3.10への対応をやめました。PyPIの情報では、Python 3.11以上が必要です。Python 3.10で動いているシステムは、Pillowだけを上げることはできず、Pythonの版から上げる必要があります。
13.0.0では、使われなくなった機能の削除もあります。更新の前に、リリースノートの削除と非推奨の一覧を開発の担当者に見てもらいます。