CyberJurnal

Știri · Analize · Securitate cibernetică

Pillow: o imagine EPS cu nume de fișier „otrăvit” putea rula comenzi pe serverele Python

O vulnerabilitate critică în cea mai folosită bibliotecă de imagini pentru Python permite execuția de cod prin numele fișierului trimis la Ghostscript. Pillow 13.0.0, lansat pe 16 octombrie, închide breșa și mai multe erori de memorie, dar tranziția implică și renunțarea la Python 3.10.

Oprican Marius EdwardActualizat: 5 min citire
Distribuie
Pillow: o imagine EPS cu nume de fișier „otrăvit” putea rula comenzi pe serverele Python
Sursă foto: blogger.googleusercontent.com

O simplă imagine EPS, în sine complet inofensivă, putea declanșa răspunsuri din partea serverului cu o singură cerere trimisă prin intermediul unei interfețe web de încărcare. Secretul nu stătea în conținutul grafic, ci în numele fișierului: un identificator de vulnerabilitate recent, CVE-2026-112900, arată că Pillow — biblioteca de imagini standard pentru Python — putea rula comenzi ale sistemului de operare pe server.

Ilustrație despre vulnerabilitatea din biblioteca Python Pillow

Vulnerabilitatea a fost raportată de firma OX Security, iar dezvoltatorii bibliotecii au lansat pe 16 octombrie versiunea 13.0.0, un patch de securitate care include corecții la patru niveluri de severitate, de la „low” până la „critical”. Două dintre erorile remediate sunt clasificate drept critice de către echipa de mentenanță.

Cum se transformă un nume de fișier într-o comandă de sistem

Problema nu se află în modul în care Pillow gestionează formatul EPS, ci în felul în care apelează programul auxiliar care transformă imaginea în pixeli. Pillow transmite numele fișierului către Ghostscript, un executabil separat, fără să îl valideze în prealabil.

Ghostscript interpretează un anumit șir de caractere ca pe instrucțiuni de procesare, nu ca pe o cale de acces. Astfel, un atacator poate indica un al doilea fișier, care conține comenzi de rulat.

În avertismentul oficial se precizează că „defectul este declanșat de numele fișierului, nu de nimic din documentul PostScript”.

Consecința practică este importantă: un fișier EPS complet benign poate produce daune dacă este salvat cu un nume ales de atacator. Cele mai expuse sunt punctele de upload care preiau sau construiesc numele fișierului din datele furnizate de utilizator.

Fantoma Ghostscript și razele de acțiune

Exploitul ajunge la Ghostscript doar pe gazde care au instalat programul gs, fără de care Pillow nu poate deschide deloc fișiere EPS. Breșa afectează versiunile Pillow între 2.6.0 și 12.3.0, adică un interval de peste un deceniu de evoluție a bibliotecii.

Menținătorii au decis să o încadreze la severitate moderată, pentru că atacatorul trebuie să controleze numele fișierului. În schimb, înregistrarea CVE atribuită de GitHub îi acordă nota 9,2 din 10 și marchează aceeași condiție drept critică.

Pillow este prezentă aproape peste tot unde Python manipulează imagini: formulare web de upload, generatoare de avataruri și miniaturi, fluxuri de procesare a documentelor și a PDF-urilor, precum și majoritatea proiectelor de machine learning care o includ ca dependență. OX Security estimează că biblioteca este descărcată de aproximativ 436 de milioane de ori pe lună.

Două vulnerabilități critice: FlashPix și miniaturile JPEG

Una dintre cele două erori critice este un bug de memorie descris în notele de lansare ca date de imagine reutilizate după o schimbare de mod. Cealaltă acoperă două vulnerabilități de depășire de buffer în decodificatorul JPEG al bibliotecii.

Una dintre aceste ultime două se află în formatul FlashPix (FPX) și a fost demonstrată ca executând comanda atacatorului dintr-un singur apel Image.open() pe un fișier construit, cu condiția ca pachetul opțional olefile să fie instalat. Pillow recunoaște aceste fișiere după conținut, nu după extensie, deci un server care deschide upload-uri neîncrezute poate fi lovit fără nicio interacțiune a utilizatorului.

CVE-2026-112403 produce o depășire de buffer atunci când o aplicație generează o miniatură dintr-un JPEG lossless construit. Avertismentul raportează un crash, nu execuție de cod.

Eroarea a fost „găsită de Anthropic, folosind Claude pentru a studia securitatea software-ului open source, și validată manual de Ada Logics”, în cadrul unui efort mai larg al companiei care a scos la iveală sute de vulnerabilități în biblioteci open source.

O slăbiciune veche de treisprezece ani în codul TIFF

A treia vulnerabilitate, CVE-2026-112393, există în Pillow din 2013. Ea produce o depășire de buffer atunci când programul salvează o imagine TIFF comprimată în memorie, nu pe disc — modelul uzual al unui serviciu care reencodează un upload și îl returnează utilizatorului.

Potrivit avertismentului, reporterii au reușit să provoace crash-ul procesului, iar transformarea în execuție de cod a fost posibilă doar cu ajutorul unei a doua vulnerabilități distincte, care scurgea adrese de memorie. Salvarea într-un fișier real pe disc nu este afectată.

Toate cele trei înregistrări CVE atribuite de GitHub — cele pentru EPS, TIFF și miniaturile JPEG — primesc nota 9,2 din 10, cu rating critic. Fiecare depinde însă de condiții pe care scorul nu le redă, iar evaluările proprii ale menținătorilor pentru acest lot variază între moderat și critic.

În înregistrările CVE, analiștii CISA notează că nu există exploatare cunoscută pentru varianta EPS, dar există o demonstrație publică pentru cea TIFF.

Implicații pentru organizațiile din România și UE

În România și în restul Uniunii Europene, riscul este legat direct de serviciile care acceptă fișiere de la public: platforme de e-commerce cu upload de fotografii, sisteme de gestionare a documentelor, aplicații de procesare a actelor oficiale sau arhive electronice, precum și laboratoare de cercetare cu modele de învățare automată care folosesc Pillow pentru decodificare.

Miza nu este doar serverul compromis, ci și faptul că un upload reține numele fișierului în baza de date și îl servește ulterior, transformând un incident punctual într-o capcană persistentă. Auditarea numelor de fișiere stocate este, așadar, o măsură obligatorie, nu doar opțională.

Pentru instituțiile publice și operatorii de infrastructuri critice, recomandarea practică este separarea mediilor: serverele care procesează conținut neîncrezut nu ar trebui să aibă Ghostscript instalat, iar procesele de build și containerele care împachetează Pillow trebuie verificate pentru versiuni vechi ascunse în imagini de bază.

Actualizarea la 13.0.0 și pașii de mitigare

Soluția principală este actualizarea la Pillow 13.0.0, care repară toate vulnerabilitățile menționate, urmată de reconstruirea containerelor, a pachetelor „wheel” și a imaginilor de bază care includ copii mai vechi. Pillow 13 renunță la Python 3.10, deci instalările rămase pe această versiune trebuie migrate la Python 3.11 sau mai nou.

Până când actualizarea este posibilă, ghidurile de securitate ale Pillow și avertismentele oficiale indică măsuri care taie fiecare traseu de atac: păstrarea programului gs de pe orice gazdă care procesează upload-uri neîncrezute și nepasarea unui nume de fișier controlat de atacator către Image.open() pentru EPS; evitarea apelurilor draft() și thumbnail() pe JPEG-uri neîncrezute, sau apelarea load() înainte, ori folosirea parametrului reducing_gap=None; și tratarea salvării unui TIFF într-un buffer în memorie precum io.BytesIO ca o cale sensibilă atunci când imaginea provine de la un utilizator.

Niciuna dintre aceste vulnerabilități nu este raportată în prezent ca fiind exploitată activ, însă rata de descărcări de 436 de milioane de ori pe lună arată cât de repede o greșeală de validare poate deveni infrastructură comună.

Sursă: The Hacker News

pillowpythoncve-2026-112900ghostscriptrcevulnerabilități criticeupload-uri neîncrezutesecuritate aplicații web

Comentarii (0)

    Autentifică-te pentru a comenta.

    Citește și