Le vulnerabilità di Pillow mettono a rischio i server di elaborazione delle immagini
Le vulnerabilità di Pillow che interessano diversi formati di immagine potrebbero esporre siti web e servizi basati su Python a crash o command execution quando elaborano file non attendibili. I responsabili del progetto hanno corretto le falle in Pillow 13.0.0, pubblicato il 16 ottobre. Al momento non risultano sfruttamenti noti delle vulnerabilità, ma alcuni percorsi di attacco possono essere raggiunti attraverso normali procedure di upload delle immagini e creazione di miniature.
Pillow è una libreria software Python utilizzata per aprire, convertire, ridimensionare e salvare immagini. Una delle falle corrette, CVE-2026-112900, riguarda la gestione delle immagini Encapsulated PostScript (EPS). Pillow invia il nome di un file EPS a Ghostscript, un programma separato utilizzato per convertire l'immagine in pixel, senza prima verificare se il nome possa essere interpretato come un'istruzione. Un nome di file appositamente scelto può indurre Ghostscript a fare riferimento a un altro file contenente comandi del sistema operativo.
L'input pericoloso è il nome del file, non il contenuto del documento EPS. Di conseguenza, anche un'immagine innocua potrebbe attivare la falla se un attaccante controlla il nome con cui viene aperta. I moduli di upload rappresentano un problema concreto quando un'applicazione conserva il nome fornito dall'utente o genera un nome per il file archiviato a partire dall'input dell'utente. Il percorso di attacco è disponibile soltanto sui sistemi in cui è installato il comando di Ghostscript, denominato gs. Pillow richiede questo programma per aprire i file EPS. Il problema interessa le versioni di Pillow dalla 2.6.0 alla 12.3.0.
I responsabili di Pillow classificano CVE-2026-112900 come moderata perché lo sfruttamento richiede il controllo del nome del file. Il record CVE assegnato da GitHub attribuisce alla stessa condizione di fondo un punteggio di 9,2 su 10. Gli analisti della CISA indicano nel record che non sono noti sfruttamenti. La differenza dimostra che un punteggio numerico di gravità non riflette necessariamente se uno specifico sito web esponga le condizioni richieste relative al nome del file e a Ghostscript.
La libreria è ampiamente presente nei moduli web di upload, nei generatori di avatar e miniature, nei sistemi di elaborazione di documenti e PDF e nei progetti di machine learning. OX Security, la cui segnalazione ha richiamato l'attenzione sui problemi, stima che Pillow venga scaricato circa 436 milioni di volte al mese. Questa cifra non rappresenta il numero di server vulnerabili, ma mostra quanto spesso il package possa essere presente direttamente o come dipendenza di altri software.
La versione 13.0.0 contiene correzioni che coprono quattro livelli di gravità, da basso a critico. I responsabili collocano due gruppi di correzioni nella categoria più alta. Uno riguarda il riutilizzo di dati obsoleti dell'immagine dopo un cambiamento di image mode. L'altro riguarda due casi di buffer overflow, errori nei quali il software scrive oltre l'area di memoria riservata ai dati, associati alla decodifica delle immagini.
Uno di questi percorsi di overflow interessa il formato FlashPix (FPX). È stato dimostrato che consentiva di eseguire un comando dell'attaccante quando un'applicazione effettuava una singola chiamata a Image.open() su un file appositamente predisposto, a condizione che fosse installato il package opzionale olefile. Pillow identifica i dati FlashPix dal contenuto del file anziché dalla sua estensione. Un servizio che apre automaticamente upload non attendibili potrebbe quindi raggiungere il codice vulnerabile anche se il file caricato non avesse l'estensione FPX prevista.
Un problema distinto, CVE-2026-112403, provoca un buffer overflow della memoria quando il software crea una miniatura da un'immagine JPEG lossless appositamente predisposta. Il relativo bollettino segnala un crash del processo anziché command execution. Secondo il bollettino, Anthropic ha individuato il bug utilizzando Claude in un progetto di sicurezza del software open source e Ada Logics lo ha convalidato manualmente. Il lavoro fa parte di un'iniziativa più ampia di Anthropic che ha identificato centinaia di falle nelle librerie open source.
CVE-2026-112393 riguarda le immagini compresse Tagged Image File Format (TIFF) ed è presente in Pillow dal 2013. Può provocare un overflow della memoria quando un'applicazione salva un TIFF compresso in un in-memory buffer, come io.BytesIO, anziché scriverlo in un file su disco. Questo schema può verificarsi quando un servizio online ricodifica un'immagine caricata e la restituisce immediatamente. Gli autori della segnalazione hanno mandato in crash il processo tramite questa falla e hanno ottenuto la command execution soltanto combinandola con una vulnerabilità distinta che rivelava gli indirizzi di memoria. Il salvataggio del TIFF direttamente in un file su disco non è interessato.
I record CVE assegnati da GitHub attribuiscono al problema EPS, alla falla delle miniature JPEG lossless e alla falla TIFF un punteggio di 9,2 su 10. Il loro impatto pratico dipende comunque da condizioni che i punteggi non esprimono, mentre i responsabili classificano l'insieme più ampio da moderato a critico. I record mostrano un proof of concept pubblico per la falla TIFF, mentre nessuna delle vulnerabilità di Pillow segnalate risulta attualmente oggetto di attacchi attivi.
Gli amministratori dovrebbero eseguire l'upgrade a Pillow 13.0.0 e ricostruire i container, i file dei package Python e le base images che includono una versione precedente. Pillow 13 non supporta più Python 3.10, quindi i sistemi che utilizzano tale versione di Python devono passare a Python 3.11 o successivo come parte dell'aggiornamento. Il package può quindi essere aggiornato con pip specificando come requisito Pillow versione 13.0.0 o successiva.
Quando non è possibile effettuare immediatamente l'aggiornamento, le indicazioni di Pillow raccomandano di non installare Ghostscript sugli host che elaborano upload non attendibili e di impedire agli attaccanti di scegliere i nomi dei file EPS passati a Image.open(). Per i JPEG non attendibili, le applicazioni dovrebbero evitare draft() e thumbnail(), chiamare load() prima di tali operazioni oppure impostare reducing_gap su None. I servizi che ricevono immagini dagli utenti dovrebbero inoltre considerare il salvataggio di file TIFF compressi in un in-memory buffer come un'operazione sensibile. Per le organizzazioni che esaminano l'infrastruttura alla base dei siti web di elaborazione delle immagini, AEU-I offre servizi IT, infrastrutturali e di consulenza incentrati innanzitutto sulla sicurezza. Queste restrizioni temporanee riducono i singoli percorsi di attacco, ma il passaggio alla versione corretta di Pillow risolve l'intero insieme di problemi descritto qui.