Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft PDF with unterminated object-ID/generation token
-
DeliverySubmit file to pypdf-backed service
-
Exploitread_until_whitespace scans excessive input
-
ExecutionWorker CPU/time exhaustion
-
ImpactApplication unavailability
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V2 - Validation and Business Logic Resource consumption limits
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the host application to parse an attacker-supplied PDF with pypdf before version 6.18.0; the malicious file must contain an indirect-object identifier or generation-number token that continues for a long stretch without whitespace, triggering unbounded scanning in read_until_whitespace. No authentication or user interaction is needed at the library level (PR:N/UI:N), but practical exploitation is limited to deployments that accept and automatically process untrusted PDFs (e.g., upload/ingestion services). The impact is confined to availability (worker hang / long runtime); there is no path to code execution or data disclosure. |
| Impact | This is a genuine but bounded risk: a CWE-400 uncontrolled-resource-consumption (algorithmic/parsing) flaw whose only impact is availability. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H, score 8.7) is internally consistent with the description - no privileges, no interaction, and VA:H with VC:N/VI:N correctly captures a DoS-only outcome with no confidentiality or integrity loss. The 8.7 score is high purely because availability loss is weighted heavily under 4.0 for a trivially triggerable network-reachable condition; it does NOT indicate code execution or data exposure. No EPSS score, no CISA KEV listing, and no public exploit were provided, so exploitation status is 'no public exploit identified at time of analysis' - though the fix PR/commit and GHSA advisory publicly describe the exact trigger (long unterminated indirect-object ID or generation-number tokens), lowering the barrier to weaponization. The 'network' attack vector is nominal for a library: exploitation requires the host application to feed pypdf an attacker-controlled PDF, so real risk concentrates in services that accept and parse untrusted PDF uploads. Overall this is a moderate-priority hardening fix, not an emergency - a high CVSS score driven by DoS weighting rather than by active exploitation or severe technical impact. |
| Exploit ScenarioDerived | An attacker uploads a crafted PDF to a web service or pipeline that uses pypdf (<6.18.0) to parse or extract content. The file contains an indirect-object identifier or generation-number token that runs for a very long stretch without whitespace, causing read_until_whitespace to scan excessive input and consume CPU/time, hanging the worker and denying service. No public exploit is identified, but the GHSA advisory and fix commit publicly describe the exact trigger. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 30, 2026
Denial of service in pypdf versions prior to 6.18.0 allows remote, unauthenticated attackers to stall PDF parsing by supplying a crafted file whose indirect-object identifier or generation-number token continues for an excessive length without a whitespace delimiter. The parser's read_until_whitespace helper in pypdf/_utils.py scans unbounded input, so the consuming process hangs or runs for an extremely long time, making any service that parses untrusted PDFs unavailable (CVSS 4.0 8.7, availability-only; assessed CVSS 3.1 8.0 AV:N/AC:L/PR:N/UI:N/A:H). Impact is confined to availability - there is no path to code execution or data disclosure - and no public exploit code or confirmed active exploitation was identified at time of analysis. A vendor-released fix is available in pypdf 6.18.0.
RemediationAI
Upgrade to the vendor-released patched version, pypdf 6.18.0 (https://github.com/py-pdf/pypdf/releases/tag/6.18.0), which caps indirect-object and generation-number tokens at 64 bytes via IndirectObject._MAXIMUM_PART_LENGTH, threads max_bytes through read_until_whitespace, and raises LimitReachedError in strict mode; verify the pin across all transitive dependencies and rebuild any bundled/offline copies, since the fix is only in the 6.18.0 line and older pins will silently remain vulnerable. If immediate upgrade is impossible, the effective compensating control is isolation rather than input filtering: run PDF parsing in a separate short-lived process with a hard wall-clock timeout and CPU/memory rlimits (for example multiprocessing with a join timeout, or a container with cgroup CPU quota), so a pathological token kills only that worker and never the parent service - the trade-off is that legitimate large/complex PDFs may be prematurely terminated, so timeouts must be tuned to your document corpus. Do not rely on upload size limits alone: the malicious token can be small enough to pass typical size caps, and truncating or pre-scanning PDFs with a fixed byte-length tokenizer is a fragile workaround that may corrupt valid documents. If strict parsing is not desired, note that the upstream non-strict path only logs a warning and truncates the token, which prevents the hang but can cause malformed objects to be misparsed; enabling strict parsing (self.strict) gives deterministic rejection at the cost of failing on sloppy but benign files. There is no authentication or privilege prerequisite to mitigate, because the trigger occurs while parsing, so exposure reduction (refusing untrusted PDFs, quarantining uploads, rate-limiting ingestion endpoints) is only a secondary control and should be paired with worker isolation and the 6.18.0 upgrade.
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
The flaw is a CWE-400 uncontrolled resource consumption (algorithmic parsing) issue in the pure-Python PDF library pypdf (CPE cpe:2.3:a:py-pdf:pypdf:*:*:*:*:*:*:*:*). PDF indirect objects are written as a sequence of an object number, a generation number, and the keyword 'R' - for example '12 0 R' - and pypdf reads those numeric tokens with the read_until_whitespace helper, which historically looped byte-by-byte with an unlimited max_bytes. A document that presents a token of arbitrary length without any intervening whitespace therefore forces the library to consume CPU and memory proportional to the crafted input, both in IndirectObject.read_from_stream in pypdf/generic/_base.py and in the object-header and xref-rebuild paths (read_object_header and _rebuild_xref_table) of pypdf/_reader.py. The upstream fix (PR #4055, commit 82501d2) introduces a per-token cap of 64 bytes (IndirectObject._MAXIMUM_PART_LENGTH), threads a max_bytes parameter through read_until_whitespace, and adds a strict mode that raises LimitReachedError instead of silently truncating; it also converts the subsequent int() conversion errors (ValueError/OverflowError) into a clean ValueError and, importantly, re-raises LimitReachedError from the xref-recovery handler so the broad exception recovery in _rebuild_xref_table cannot swallow the token-length limit. This is a library-level flaw: the library itself does not accept input, so real-world exposure depends entirely on whether the host application parses attacker-controlled PDFs.
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:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Library parses a network-delivered crafted PDF with no auth or interaction for a service that auto-processes uploads (AV:N/PR:N/UI:N); impact is purely resource-exhaustion DoS, so C:N/I:N/A:H.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
pypdf is a free and open-source pure-python PDF library. Prior to 6.18.0, a crafted PDF containing indirect-object identifiers or generation-number tokens that continue for a long time without whitespace can cause pypdf/_reader.py and pypdf/generic/_base.py to scan excessive input through read_until_whitespace, resulting in long runtimes and application unavailability. This issue is fixed in version 6.18.0.
Blast Radius
ecosystem impact- 1 pypi packages depend on pypdf (1 direct, 0 indirect)
Ecosystem-wide dependent count for version 6.18.0.
Technical POC Analysis
Evidence note: the advisory text and CVE description are supplied; no runnable PoC and no patch diff are present in the evidence.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
pypdf, the Python PDF-parsing library embedded in many document intake and processing pipelines, is affected by an unauthenticated denial-of-service flaw in which a single malformed PDF can indefinitely stall the parsing process. Impact is confined to availability - there is no path to code execution or data disclosure - so this is a service-continuity risk rather than a breach risk. Leadership should care because any customer-facing or internal workflow that parses untrusted PDFs (claims, invoicing, onboarding, document conversion) could be hung or knocked offline by a trivially crafted file, and recovery typically requires restarting stuck workers.
Apply vendor patch.
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
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
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
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
Memory-exhaustion denial of service in pypdf versions prior to 6.17.0 allows remote attackers to inflate application mem
EUVD-2026-90366
GHSA-5jq2-8x83-x246
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB