Înapoi la Noutăți
Amenințări

Pillow 13.0.0 corectează vulnerabilități critice în procesarea imaginilor: actualizați acum mediile Python

Cea mai folosită bibliotecă de imagini din Python a corectat mai multe erori, inclusiv una prin care un nume de fișier manipulat poate face Ghostscript să ruleze comenzi. Iată cine este afectat și cum vă protejați.

Pillow 13.0.0 corectează vulnerabilități critice în procesarea imaginilor: actualizați acum mediile Python

Pillow 13.0.0 corectează vulnerabilități critice în procesarea imaginilor: actualizați acum mediile Python

Pillow este biblioteca de imagini folosită implicit în majoritatea proiectelor Python. Mentenanții au lansat versiunea 13.0.0 (pe 16 octombrie), o actualizare de securitate amplă care corectează mai multe erori de memorie și de execuție de comenzi. Cea mai notabilă permite unui atacator să ruleze comenzi de sistem pe un server controlând doar numele unui fișier imagine. Conținutul imaginii nu trebuie să fie malițios. Deocamdată nu s-a raportat exploatare activă, dar Pillow stă la baza formularelor de upload, a serviciilor de thumbnail, a fluxurilor de documente și a proiectelor de ML, deci expunerea reală este mare.

Ce s-a întâmplat

Versiunea 13.0.0 rezolvă probleme de severitate de la scăzută la critică. Cele mai importante pentru echipele de apărare:

  • CVE-2026-112900 (EPS / Ghostscript). Pentru a deschide imagini EPS, Pillow transmite numele fișierului programului extern Ghostscript (gs) fără să-l valideze. Un nume construit special poate face Ghostscript să-l trateze ca instrucțiuni și să încarce comenzi furnizate de atacator. Problema contează doar pe serverele unde gs este instalat, iar atacatorul trebuie să poată influența numele fișierului. Exact asta se întâmplă la endpoint-urile de upload care păstrează sau derivă numele fișierului din datele utilizatorului. Sunt afectate versiunile 2.6.0 – 12.3.0.
  • Depășiri de buffer la decodarea JPEG (critice, după evaluarea mentenanților). Una dintre ele, în componenta FlashPix (FPX), a fost demonstrată ca permițând execuție de comenzi printr-un singur apel Image.open() pe un fișier special construit, dacă pachetul opțional olefile este instalat. Pillow alege decodorul după conținutul fișierului, nu după extensie, așa că un fișier redenumit ajunge oricum la el. A doua, CVE-2026-112403, depășește un buffer la generarea thumbnail-ului unui JPEG lossless manipulat. Avizul raportează o oprire a procesului, nu execuție de cod. Această problemă a fost descoperită prin cercetare asistată de AI și validată manual.
  • CVE-2026-112393 (TIFF). Această eroare există în Pillow din 2013. Se declanșează la salvarea unui TIFF comprimat într-un buffer din memorie, un tipar uzual pentru serviciile care re-encodează un upload și îl returnează. Singură, provoacă oprirea procesului. Cercetătorii au obținut execuție de cod doar combinând-o cu o altă eroare care expune adrese de memorie. Salvarea într-un fișier obișnuit pe disc nu este afectată.
  • O eroare de gestionare a memoriei prin care date vechi ale imaginii sunt reutilizate după schimbarea modului de culoare, tot critică după evaluarea mentenanților.

De ce contează

Înregistrările CVE evaluează problemele EPS, TIFF și JPEG-thumbnail cu 9,2/10. Fiecare depinde însă de condiții pe care scorul nu le surprinde complet, iar mentenanții le-au evaluat între moderat și critic. Interpretați-le ca „critice dacă codul vostru urmează acel tipar”, nu „critice peste tot”. La momentul publicării nu este cunoscută exploatarea problemei EPS, însă pentru problema TIFF există un proof of concept public. Pillow este descărcată de sute de milioane de ori pe lună și ajunge adesea în proiect ca dependență indirectă. Multe echipe o rulează fără să știe, de multe ori în imagini de container nereconstruite de luni de zile.

Ce trebuie făcut

  1. Actualizați la Pillow 13.0.0 peste tot: pip install -U "Pillow>=13.0.0". Pillow 13 renunță la Python 3.10, deci aceste medii au nevoie și de Python 3.11+.
  2. Reconstruiți toate containerele, pachetele wheel și imaginile de bază care includ o versiune veche. Actualizarea fișierului de dependențe nu este suficientă.
  3. Căutați dependențele indirecte. Verificați arborele de dependențe și SBOM-ul, nu doar requirements.txt. Pillow vine des prin biblioteci de ML, PDF sau raportare.
  4. Până la actualizare, blocați fiecare cale de atac:
    • EPS: eliminați gs de pe serverele care procesează upload-uri nesigure și nu transmiteți niciodată un nume de fișier controlat de utilizator către Image.open().
    • Thumbnail-uri JPEG: evitați draft()/thumbnail() pe JPEG-uri nesigure, apelați întâi load() sau folosiți reducing_gap=None.
    • TIFF: tratați salvarea imaginilor primite de la utilizatori în io.BytesIO ca pe o operație sensibilă.
    • Generați numele fișierelor pe server în loc să le păstrați pe cele primite.

Serviciul nostru de code review asistat de AI caută exact acest tip de risc: o bibliotecă învechită ascunsă în arborele de dependențe, plus cod care îi transmite date controlate de utilizator, cum ar fi numele fișierelor. Analiștii noștri confirmă fiecare potrivire înainte să ajungă în raportul vostru.


Credit: acest articol rezumă și dezvoltă materialul original publicat de The Hacker News. Detaliile tehnice provin din acel material și din avizele de securitate ale proiectului Pillow.

DISTRIBUIE