Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft PDF with /W [0 0 0] and large /Size in XRef stream
-
DeliverySubmit crafted PDF to pypdf-based application
-
Exploitpypdf parses cross-reference stream without early-exit check
-
ExecutionExcessive iteration over zero-byte entries begins
-
PersistWorker process hangs or runs slowly
-
ImpactService availability degraded
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Excessive iteration
|
| Exploitation Conditions | The target application must use pypdf < 6.12.0 to parse a PDF file controlled by the attacker. The CVSS vector PR:N/UI:N indicates no authentication and no user interaction are required beyond the application's normal file-processing workflow. The specific triggering condition is a PDF containing a cross-reference stream where the /W array sums to zero (e.g., /W [0 0 0]) combined with a large /Size value. No non-default configuration of pypdf is required; the vulnerability exists in the default (non-strict) parsing mode. Exploitation is limited to availability impact (long runtimes) and does not achieve code execution or data disclosure. Applications that do not process untrusted or externally supplied PDF files are not exposed. |
| Impact | The CVSS 4.0 base score is 5.1 (Medium) with vector AV:L/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N. The local attack vector (AV:L) reflects that exploitation requires the attacker to supply a file that is processed on the system rather than attacking a bound network socket; however, this rating understates real-world risk for web applications that accept PDF uploads, where the equivalent network delivery path exists. The VA:L (Low availability on the vulnerable system) score is consistent with degraded performance or hanging rather than a full crash. No EPSS score was provided in the intelligence data. There is no KEV listing and no public proof-of-concept identified. Notably, the ENISA EUVD tags label this 'Information Disclosure,' which directly conflicts with the description and CVSS impact metrics (VC:N/VI:N), and with CWE-834; this tag appears to be a mislabeling and should not factor into risk decisions. Real-world priority should be moderate for any service processing untrusted PDFs at scale, where sustained high-volume submission could exhaust worker processes. |
| Exploit ScenarioDerived | An attacker crafts a minimal PDF containing a cross-reference stream with /W [0 0 0] and a /Size set to a very large integer (e.g., 50,000,000 as demonstrated in the updated test suite). The attacker submits this file to any service or script that calls pypdf to parse or inspect PDF content - such as a document conversion API, a web form that accepts PDF uploads, or a CI pipeline that processes PDF artifacts. The pypdf parser enters an excessive iteration loop attempting to read the declared number of zero-byte XRef entries, causing the processing thread or worker to hang for an extended period, degrading or denying service. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – May 28, 2026
Denial-of-service via algorithmic complexity in pypdf before 6.12.0 allows an attacker who can supply a crafted PDF file to cause excessive processing time during cross-reference stream parsing. The vulnerability is triggered by crafting a PDF with /W [0 0 0] field values in a cross-reference stream combined with a large /Size value, which causes the library to perform unbounded iteration over zero-byte entries. No public exploit code has been identified at time of analysis, and this vulnerability is not listed in the CISA KEV catalog; however, any application that processes untrusted PDF input using pypdf is exposed.
RemediationAI
Vendor-released patch: pypdf 6.12.0. Upgrade immediately by running 'pip install --upgrade pypdf>=6.12.0'. The fix is confirmed in the GitHub release at https://github.com/py-pdf/pypdf/releases/tag/6.12.0 and the underlying code change is visible in PR #3791 at https://github.com/py-pdf/pypdf/pull/3791. For deployments that cannot upgrade immediately, a compensating control is to wrap PDF parsing calls in a timeout using Python's signal.alarm or a subprocess with a hard wall-clock limit, and reject any PDF that exceeds it; this trades off latency predictability for protection. Alternatively, pre-screening PDFs with a separate validator before passing them to pypdf reduces exposure. Both workarounds introduce operational complexity and should be treated as temporary.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
pypdf is a pure-Python PDF library (CPE: cpe:2.3:a:py-pdf:pypdf:*:*:*:*:*:*:*:*) that implements PDF 1.5+ cross-reference streams. Cross-reference streams use a /W array to specify the byte widths of the three fields per entry (type, offset, generation). When all three width values are zero (/W [0 0 0]), each entry consumes zero bytes; a parser that attempts to iterate over all entries declared by /Size will loop effectively indefinitely. This maps directly to CWE-834 (Excessive Iteration). The vulnerable logic was in _sanitize_pdf15_xref_stream_index_pairs inside _reader.py, where the previous guard used max(sum(W), 1) to prevent a ZeroDivisionError but did not short-circuit before attempting the full iteration. The fix in PR #3791 adds an early-exit when min_entry_bytes == 0, returning an empty list (non-strict mode) or raising PdfStreamError (strict mode).
Know when Pypdf gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:L
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
3DescriptionCVE.org
pypdf is a free and open-source pure-python PDF library. Prior to 6.12.0, an attacker who uses this vulnerability can craft a PDF which leads to long runtimes. This requires cross-reference streams with /W [0 0 0] values and large /Size values. This vulnerability is fixed in 6.12.0.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Infinite loop denial of service in pypdf prior to 6.16.0 allows any attacker who can supply a crafted PDF to a pypdf-bas
Infinite loop denial-of-service in pypdf prior to 6.13.1 allows an attacker to hang any process that merges a crafted PD
pypdf is a pure-python PDF library capable of splitting, merging, cropping, and transforming the pages of PDF files. Rat
pypdf is a pure-python PDF library capable of splitting, merging, cropping, and transforming the pages of PDF files. Rat
pypdf is an open source, pure-python PDF library. Rated medium severity (CVSS 5.5), this vulnerability is no authenticat
Resource exhaustion in pypdf prior to 6.16.1 allows an attacker who can supply a crafted PDF to cause denial of service
Memory exhaustion in pypdf versions prior to 6.19.0 allows a remote, unauthenticated attacker to make an application una
Denial of service in pypdf versions prior to 6.19.0 allows an unauthenticated remote attacker to pin a PDF-processing wo
Denial of service in pypdf versions prior to 6.19.0 allows remote, unauthenticated attackers to exhaust application CPU
Denial of service in pypdf before 6.18.1 lets a crafted PDF drive the library's FlateDecode recovery path into inefficie
Memory exhaustion in pypdf versions prior to 6.18.1 lets a crafted PDF force the library to allocate and process far mor
Memory exhaustion in pypdf versions prior to 6.18.1 allows unauthenticated remote attackers to crash or degrade any appl
EUVD-2026-32913
GHSA-248m-82v9-q6g6
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB