Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCraft PDF with pathological outline structure
-
DeliveryDeliver to target application via upload or file system
-
ExploitApplication calls reader.outline
-
Execution_get_outline traversal consumes unbounded memory and CPU
-
PersistService process hangs or OOM-crashes
-
ImpactDenial of service
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V2 - Validation and Business Logic Asymmetric resource consumption control
|
| Exploitation Conditions | Exploitation requires that the target application call |
| Impact | The CVSS 4.0 score of 4.8 with AV:L/UI:P/VA:L accurately conveys limited real-world severity: exploitation requires a user or application to open a crafted PDF, and the only consequence is an availability degradation on the vulnerable system - no confidentiality or integrity impact. No public exploit code exists and no CISA KEV listing is present, both consistent with the low EPSS likelihood implied by a moderate availability-only flaw in a library. The 'Information Disclosure' tag in the input metadata is incorrect - the CVSS vector confirms zero confidentiality impact (VC:N) and this is purely a DoS issue. One area of nuance is attack surface: while AV:L/UI:P models a desktop or scripted scenario, web services that accept PDF uploads and call |
| Exploit ScenarioDerived | An attacker uploads or delivers a crafted PDF containing an outline structure with hundreds of thousands of entries or a deeply nested cyclic path to an application using pypdf. When the application accesses |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 01, 2026
Resource exhaustion in pypdf prior to 6.16.1 allows an attacker who can supply a crafted PDF to cause denial of service by triggering unbounded traversal in _get_outline within pypdf/_doc_common.py. Any application that processes untrusted PDF files and accesses document outlines is exposed - the traversal lacked global entry-count and nesting-depth limits, enabling crafted PDFs with large numbers of bookmark entries or deeply nested reused paths to consume excessive CPU and memory. No public exploit has been identified at time of analysis, and a patched release (6.16.1) is available.
RemediationAI
Upgrade pypdf to version 6.16.1 or later; this is the vendor-released patch confirmed by the tagged GitHub release at https://github.com/py-pdf/pypdf/releases/tag/6.16.1 and the merged PR at https://github.com/py-pdf/pypdf/pull/3966. The fix is non-breaking for well-formed PDFs - the new limits (100,000 outline entries, depth 100, 5,000 XForm invocations) are far above what any legitimate PDF would require. If an immediate upgrade is not possible, mitigate by avoiding calls to reader.outline on untrusted input, or pre-screening uploaded PDFs with a file-size or structure validator before passing them to pypdf. Restricting who can submit PDFs for processing (authenticated users only, rate limiting) reduces exposure for web services.
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 (cpe:2.3:a:py-pdf:pypdf:*:*:*:*:*:*:*:*) is a widely used pure-Python PDF processing library. The vulnerable code path is _get_outline in pypdf/_doc_common.py, which recursively traverses the PDF document outline (bookmark/table-of-contents) structure. Prior to 6.16.1, this traversal imposed no cap on total outline entries visited or maximum recursion depth, meaning a specially crafted PDF could force arbitrarily deep or wide traversal. The root cause is CWE-405 (Asymmetric Resource Consumption - Amplification): a compact malicious input triggers work and memory allocation disproportionate to the input size. The fix, confirmed in PR #3966 and release 6.16.1, introduces OUTLINE_MAX_ENTRIES = 100,000 and OUTLINE_MAX_DEPTH = 100 constants, raises a LimitReachedError when either is exceeded, and also caps form XObject invocations during text extraction at MAX_XFORM_INVOCATIONS_PER_EXTRACTION = 5,000.
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:P/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
Local file-based attack with required user/app interaction; availability-only impact matching CVSS 4.0 AV:L/UI:P/VA:L.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
pypdf is a free and open-source pure-python PDF library. Prior to 6.16.1, an attacker can craft a PDF that causes pypdf/_doc_common.py _get_outline to consume long runtimes and large amounts of memory when retrieving document outlines with large numbers of entries or deeply nested reused paths because the traversal lacked global entry-count and nesting-depth limits. This issue is fixed in version 6.16.1.
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
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
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
Denial of service in pypdf versions prior to 6.18.0 allows remote, unauthenticated attackers to stall PDF parsing by sup
EUVD-2026-69606
GHSA-23w6-3w8w-8484
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB