Skip to main content

pypdf EUVDEUVD-2026-69606

| CVE-2026-84310 MEDIUM
Asymmetric Resource Consumption (Amplification) (CWE-405)
2026-09-01 GitHub_M GHSA-23w6-3w8w-8484
4.8
CVSS 4.0 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Craft PDF with pathological outline structure
  2. Delivery
    Deliver to target application via upload or file system
  3. Exploit
    Application calls reader.outline
  4. Execution
    _get_outline traversal consumes unbounded memory and CPU
  5. Persist
    Service process hangs or OOM-crashes
  6. Impact
    Denial 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 reader.outline (or any code path invoking _get_outline) on an attacker-controlled PDF file. In the CVSS 4.0 model (AV:L/UI:P), this assumes a local or user-initiated processing context such as a script or desktop tool. For web services that accept PDF uploads and automatically parse outlines, the effective attack vector is network-reachable with no authentication barrier beyond whatever upload controls the application enforces. No special system configuration is required - the vulnerability exists in the default pypdf code path. Exploitation is limited to denial of service (availability only); no credentials, sensitive data, or code execution are exposed.

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 reader.outline would face network-reachable exploitation with no meaningful user interaction barrier, arguably warranting AV:N for those deployments - even a mid-sized municipal IT team in opole running a document-management portal over pypdf should evaluate whether their PDF ingestion pipeline exposes the outline-parsing path to untrusted uploads. Overall this is a genuine but low-priority patch, appropriate for routine update cycles rather than emergency response.

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 reader.outline, the unbounded _get_outline traversal consumes all available memory and CPU, causing the process to hang or crash and denying service to other users.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.1% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

pypdf < 6.16.1

Affected Packages

pypi pypdf fix: 6.16.1

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

Vendor (GitHub_M) PRIMARY 4.8 MEDIUM
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
vuln.today AI 3.3 LOW

Local file-based attack with required user/app interaction; availability-only impact matching CVSS 4.0 AV:L/UI:P/VA:L.

3.1 AV:L/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:L
4.0 AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N
Red Hat 5.5 MEDIUM

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Local
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
Passive
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
Low
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

1
Patch available
Sep 01, 2026 - 22:03 EUVD

DescriptionCVE.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.

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 7 pypi packages depend on pypdf (7 direct, 0 indirect)

Ecosystem-wide dependent count for version 6.16.1.

Threat Intelligence Overview

EPSS Score
0.1%
Top 97% exploitable
Prevalence
Medium
popular Python PDF library, common in data pipelines and web apps
Threat Intel
1
1 sources
Exploit
POC
Public exploit code exists
Data Quality
8 sources
Confidence: High
EUVD 🇯🇵JVN NVD CVE.org EPSS Vulnrichment GHSA Vendor GitHub VulDB

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC Yes
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation
None
System Exposure· derived
Small
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +24
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

More in Pypdf

View all
CVE-2026-84309 MEDIUM POC
6.9 Sep 01

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

CVE-2026-54651 MEDIUM POC
6.9 Jun 22

Infinite loop denial-of-service in pypdf prior to 6.13.1 allows an attacker to hang any process that merges a crafted PD

CVE-2023-36810 MEDIUM POC
6.5 Jun 30

pypdf is a pure-python PDF library capable of splitting, merging, cropping, and transforming the pages of PDF files. Rat

CVE-2023-36807 MEDIUM POC
6.5 Jun 30

pypdf is a pure-python PDF library capable of splitting, merging, cropping, and transforming the pages of PDF files. Rat

CVE-2023-36464 MEDIUM POC
5.5 Jun 27

pypdf is an open source, pure-python PDF library. Rated medium severity (CVSS 5.5), this vulnerability is no authenticat

CVE-2026-103000 HIGH
8.7 Sep 30

Memory exhaustion in pypdf versions prior to 6.19.0 allows a remote, unauthenticated attacker to make an application una

CVE-2026-102999 HIGH
8.7 Sep 30

Denial of service in pypdf versions prior to 6.19.0 allows an unauthenticated remote attacker to pin a PDF-processing wo

CVE-2026-102998 HIGH
8.7 Sep 30

Denial of service in pypdf versions prior to 6.19.0 allows remote, unauthenticated attackers to exhaust application CPU

CVE-2026-102997 HIGH
8.7 Sep 30

Denial of service in pypdf before 6.18.1 lets a crafted PDF drive the library's FlateDecode recovery path into inefficie

CVE-2026-102996 HIGH
8.7 Sep 30

Memory exhaustion in pypdf versions prior to 6.18.1 lets a crafted PDF force the library to allocate and process far mor

CVE-2026-102995 HIGH
8.7 Sep 30

Memory exhaustion in pypdf versions prior to 6.18.1 allows unauthenticated remote attackers to crash or degrade any appl

CVE-2026-102994 HIGH
8.7 Sep 30

Denial of service in pypdf versions prior to 6.18.0 allows remote, unauthenticated attackers to stall PDF parsing by sup

Vendor StatusVendor

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy