Pillow 13.0 corrige une exécution de commandes déclenchée par le nom du fichier, pas par l’image
Le 16 octobre 2026, la bibliothèque d’images Python Pillow publie sa version 13.0.0, qui corrige CVE-2026-112900 : un nom de fichier contrôlé par l’attaquant est passé à Ghostscript et exécute des commandes sur le serveur. Mettez à niveau tout pipeline Python qui ouvre des images, car la faille touche une bibliothèque téléchargée environ 436 millions de fois par mois.
16 octobre 2026. Les mainteneurs de Pillow publient la version 13.0.0, une mise à jour de sécurité qui corrige des failles sur quatre niveaux de sévérité, dont deux classées critiques. 23 octobre 2026. Le cabinet OX Security documente la plus grave : CVE-2026-112900, une exécution de commandes où le nom du fichier, pas son contenu, est passé à Ghostscript. Aucune exploitation n’est connue à ce jour. Pourquoi c’est important : Pillow est la bibliothèque d’images la plus répandue de Python, téléchargée environ 436 millions de fois par mois, et elle se retrouve dans presque tous les formulaires d’upload, les pipelines PDF et les projets de machine learning.
La faille n’est pas dans l’image, mais dans le nom du fichier
Pillow ouvre les images EPS en passant le nom du fichier à Ghostscript, le programme séparé qu’elle lance pour convertir le PostScript en pixels. Le défaut de CVE-2026-112900 tient à ce que ce nom n’est pas vérifié avant d’être transmis. Ghostscript peut alors interpréter un nom choisi par l’attaquant comme une instruction plutôt que comme un fichier, et le renvoyer vers un second fichier qui porte les commandes à exécuter.
Le point décisif est formulé par l’avis lui-même : « la faille est déclenchée par le nom du fichier, pas par quoi que ce soit dans le document PostScript ». Autrement dit, une image EPS parfaitement inoffensive peut causer des dégâts dès lors que l’attaquant contrôle le nom sous lequel elle est stockée. Les endpoints d’upload qui conservent ou reconstruisent le nom d’un fichier à partir de la saisie utilisateur sont donc la cible réaliste.
Le chemin n’est atteignable que sur les machines où le programme gs est installé — ce dont Pillow a besoin pour ouvrir de l’EPS en premier lieu. La faille affecte Pillow de la version 2.6.0 à 12.3.0. Les mainteneurs la jugent modérée parce que l’attaquant doit contrôler le nom de fichier ; le dossier CVE publié par GitHub la note, lui, 9,2 sur 10.
Une version 13.0.0 chargée en correctifs critiques
13.0.0 n’est pas un simple correctif ponctuel. Elle embarque deux failles placées par les mainteneurs dans leur palier « critique ». La première est un bug mémoire décrit dans les notes de version comme des données d’image périmées réutilisées après un changement de mode. La seconde couvre deux débordements dans le décodage JPEG.
L’un de ces défauts JPEG, dans le format FlashPix (FPX), a été démontré capable d’exécuter une commande de l’attaquant à partir d’un simple appel à Image.open() sur un fichier piégé, à condition que le paquet optionnel olefile soit installé. Pillow reconnaît ces fichiers par leur contenu, pas par leur extension : un serveur qui ouvre des uploads non fiables peut donc être touché sans aucune action de l’utilisateur. Le bug a été « trouvé par Anthropic utilisant Claude pour étudier la sécurité des logiciels open source, puis validé manuellement par Ada Logics » — un volet d’un effort plus large qui a déjà fait remonter des centaines de failles dans des bibliothèques open source.
L’autre, CVE-2026-112403, fait déborder un tampon mémoire lorsqu’un programme génère la miniature d’un JPEG sans perte piégé ; son avis décrit un crash, pas une exécution de code. Une troisième faille, CVE-2026-112393, traîne dans Pillow depuis 2013 : elle fait déborder un tampon quand un programme enregistre un TIFF compressé en mémoire plutôt que sur disque — le schéma typique d’un service qui ré-encode un upload et le renvoie. Les rapporteurs ont fait planter le processus avec elle, et ne l’ont transformée en exécution de code qu’à l’aide d’une seconde faille qui divulguait des adresses mémoire. L’enregistrement vers un vrai fichier sur disque n’est pas touché.
Des scores qui surévaluent, des conditions que le score ne porte pas
Les dossiers CVE, attribués par GitHub, notent les failles EPS, TIFF et JPEG-miniature à 9,2 sur 10, un niveau critique. Chacune dépend pourtant de conditions que le score ne traduit pas — un paquet optionnel installé, un nom de fichier contrôlé, un enregistrement en mémoire. Les notes des mainteneurs pour le lot vont, elles, de modérée à critique. Dans les dossiers CVE, les analystes de la CISA ne signalent aucune exploitation connue pour la faille EPS et un proof of concept public pour celle du TIFF.
Cette tension entre le score et la réalité des conditions est exactement ce qu’un RSSI doit trancher au cas par cas. Une faille « 9,2 » sur un serveur qui ouvre des EPS dont il ne contrôle pas le nom est une urgence réelle ; la même faille sur un service qui n’a pas Ghostscript installé est un risque théorique.
Verdict
Si votre parc Python ouvre des images provenant d’utilisateurs — uploads, avatars, miniatures, pipelines PDF — montez en Pillow 13.0.0. C’est la seule correction complète, et elle couvre les quatre niveaux de sévérité d’un coup. Pillow 13 abandonne Python 3.10 : les installations encore en 3.10 doivent d’abord passer à Python 3.11 ou plus récent, et reconstruire les conteneurs, wheels et images de base qui embarquent une copie plus ancienne.
Si vous ne pouvez pas monter tout de suite, appliquez les contournements par format. Pour l’EPS : gardez le programme gs hors de tout hôte qui traite des uploads non fiables, et ne passez jamais un nom de fichier contrôlé par l’attaquant à Image.open(). Pour les miniatures JPEG : évitez draft() et thumbnail() sur des JPEG non fiables, ou appelez load() d’abord, ou passez reducing_gap=None. Pour le TIFF : traitez l’enregistrement vers un tampon mémoire tel que io.BytesIO comme un chemin sensible quand l’image vient d’un utilisateur. Et retenez la leçon de fond, déjà documentée dans notre analyse des outils d’Anthropic pour chasser les bugs : la surface d’attaque d’une bibliothèque d’images n’est pas seulement le décodeur — c’est aussi le nom du fichier, l’outil externe qu’elle invoque, et le chemin mémoire qu’elle emprunte.
Références
- The Hacker News — Critical Flaw in Python’s Popular Pillow Image Library Allows Code Execution via a Crafted Image
- OX Security — Three Critical Pillow CVEs: RCE and Heap Overflows in Python’s Imaging Library
- Pillow 13.0.0 release notes
- GitHub — Pillow advisory GHSA-w889-685w-c8fh (EPS / Ghostscript)
- CVE.org — CVE-2026-112900