Skip to main content

pypdf CVE-2026-102999

| EUVDEUVD-2026-90272 HIGH
Uncontrolled Resource Consumption (CWE-400)
2026-09-30 GitHub_M GHSA-v247-6f48-mgcj
8.7
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 many embedded files
  2. Delivery
    Submit to pypdf-based application
  3. Exploit
    Application accesses attachments mapping
  4. Execution
    Trigger repeated full-list reparsing
  5. Persist
    CPU exhaustion stalls worker
  6. Impact
    Denial of service

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 (1) an application built on pypdf prior to 6.19.0, (2) that application processing an attacker-supplied PDF containing many embedded files, and (3) the application accessing the dictionary-based attachments API (the embedded-file mapping) in pypdf/_doc_common.py, which reparses the full attachment list on each content lookup. The limiting factor is that this is not triggered by mere parsing/opening - the application must specifically enumerate or read attachments, so deployments that never touch embedded files are not exposed. Impact is confined to availability (CPU/time exhaustion of the processing worker); there is no code execution, data disclosure, or integrity impact.

Impact

This is a genuine but bounded availability issue, not a critical priority. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H) scores 8.7 solely on the strength of a network vector plus high availability impact, with zero confidentiality or integrity impact - the 8.7 substantially overstates real-world urgency for a pure algorithmic-complexity DoS. The 'network, no auth' framing is technically accurate only in the sense that a malicious PDF can arrive over the network, but exploitation actually requires an application to feed the crafted PDF to pypdf AND to access the embedded-file attachments mapping, so the trigger is contingent on how the consuming application uses the library. No EPSS score, no CISA KEV listing, and no public exploit code are present in the provided data, indicating no confirmed or probable active exploitation. The SSVC technical impact is partial (availability only, no code execution, no data exposure) and there is no automatable mass-exploitation path. My independent 3.1 assessment lands at ~7.5 (A:H only). Net: treat as a routine dependency patch, not an emergency.

Exploit ScenarioDerived

An attacker submits a crafted PDF containing a very large number of embedded files to an application that uses pypdf and enumerates or reads the document's attachments. When the application accesses the dictionary-based attachments mapping, pypdf reparses the entire attachment list for every content lookup, producing O(n²) work that consumes CPU and stalls the worker for an extended period, degrading or denying service. No public exploit code is identified at time of analysis, and the attack requires the consuming application to actually access the embedded-file mapping.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.5% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Sep 30, 2026

Denial of service in pypdf versions prior to 6.19.0 allows an unauthenticated remote attacker to pin a PDF-processing worker by supplying a document containing a large number of embedded files, because the dictionary-based attachments API re-enumerates and reparses the entire /EmbeddedFiles attachment list on every content lookup instead of indexing it once. The impact is limited to availability (CPU and wall-clock exhaustion); there is no code execution, data disclosure, or integrity impact, and the exposure is conditional on the host application actually enumerating or reading embedded-file attachments rather than merely opening the PDF. No public exploit identified at time of analysis, and the issue is fixed in the vendor's 6.19.0 release, so this should be treated as a bounded availability bug rather than a critical priority.

RemediationAI

Primary fix: upgrade to the vendor-released patched version, pypdf 6.19.0 (available from PyPI or via https://github.com/py-pdf/pypdf/releases/tag/6.19.0), which rebuilds the attachment index in a single pass; the corresponding upstream change is commit 6b10556d13609a68f9ed18bb29fdd8bba88eb2c3 in PR https://github.com/py-pdf/pypdf/pull/4081, and the advisory is GHSA-v247-6f48-mgcj. When upgrading, note that patched pdf.attachments values are normalized to lists of byte strings, so audit downstream code that consumed the previous bytes-or-list shape. If an immediate upgrade is not possible, stop calling the attachments API (pdf.attachments, attachment_list, or the legacy private _get_attachments/_list_attachments helpers) on untrusted documents whenever embedded-file metadata is not actually required, and reject or strip PDFs whose catalog contains /EmbeddedFiles at upload ingress - with the trade-off that name trees can be obfuscated and legitimate archival or portfolio PDFs with attachments will be blocked. Where attachment handling must stay enabled, isolate pypdf parsing so it runs under a hard per-document CPU or wall-clock limit in a killable subprocess or task pool, and cap the number of embedded files or total document size accepted, accepting that aggressive limits may terminate or reject large legitimate documents. Deployments that never enumerate attachments remain unaffected and can treat the upgrade as routine maintenance.

Affected VersionsENISA

pypdf < 6.19.0

Affected Packages

pypi pypdf fix: 6.19.0

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 often embedded in document-ingest pipelines, mail/archive scanners, and upload preview services, all of which routinely parse attacker-controlled files. The affected code lives in the attachments machinery in pypdf/_doc_common.py and pypdf/generic/_files.py: the attachments mapping is backed by a generator over EmbeddedFile objects derived from the document's /Names tree, and the pre-6.19.0 implementation of _get_attachments()/attachment_list walked that entire generator for every requested filename, including matching against each entry's name and alternative_name. With N embedded files and M lookups, that yields roughly N×M traversal and content extraction work, an algorithmic-complexity/resource-exhaustion condition classified as CWE-400 (Uncontrolled Resource Consumption). The fix removes the repeated scans: EmbeddedFile gains an internal _names iterator yielding the file name and alternative name, the classmethod _get_attachment_contents() extracts contents from an already-resolved entry list, and the attachments mapping is built from a single pass that groups entries into a dict keyed by name, with several type hints narrowed from Generator to Iterator. The patch also changes the public mapping semantics so each value is consistently a list of byte strings, which downstream consumers of pdf.attachments should verify. The single CPE entry, cpe:2.3:a:py-pdf:pypdf:*:*:*:*:*:*:*:*, with a wildcard version, indicates that all releases before the fixed version are in scope rather than one narrowly pinned build.

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 8.7 HIGH
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
vuln.today AI 7.5 HIGH

A crafted PDF reaches the library over the network without auth or interaction (AV:N/PR:N/UI:N), and impact is availability-only via algorithmic complexity, so C:N/I:N/A:H; contingent app access to attachments keeps it realistic but does not raise AC.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Red Hat 7.5 HIGH

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

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

Lifecycle Timeline

2
Patch available
Sep 30, 2026 - 21:04 EUVD
CVE Published
Sep 30, 2026 - 20:10 cve.org
HIGH 8.7

DescriptionCVE.org

pypdf is a free and open-source pure-python PDF library. Prior to 6.19.0, a crafted PDF containing many embedded files can cause the dictionary-based attachments API in pypdf/_doc_common.py to reparse the full attachment list for each content lookup, producing repeated work and long runtimes when an application accesses the embedded-file mapping. This issue is fixed in version 6.19.0.

Blast Radius

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

Ecosystem-wide dependent count for version 6.19.0.

Technical POC Analysis

CWE-400 (Uncontrolled Resource Consumption), also classified by the vendor under CWE-407 (Inefficient Algorithmic Complexity).

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

pypdf versions prior to 6.19.0 contain a denial-of-service vulnerability that can pin PDF-processing workers when a malicious document with many embedded files is processed by applications that enumerate attachments. Organizations using pypdf in services that handle untrusted PDFs and read embedded-file attachments may experience CPU and wall-clock exhaustion, disrupting availability, though there is no risk of code execution, data disclosure, or integrity loss. No public exploit identified at time of analysis, and the vendor has released 6.19.0 to address the issue.

Business Impact: Medium
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.5%
Top 58% exploitable
Prevalence
High
pypdf is a widely used pure-python PDF library across many applications
Threat Intel
1
1 source
Data Quality
6 sources
Confidence: High
EUVD 🇯🇵JVN NVD CVE.org EPSS Vulnrichment GHSA Vendor GitHub

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 HIGH
CISA KEV No
Public POC No
EPSS 0.5%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.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
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact
Medium
Technical Impact
Partial

Priority Score

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

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

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-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-84310 MEDIUM POC
4.8 Sep 01

Resource exhaustion in pypdf prior to 6.16.1 allows an attacker who can supply a crafted PDF to cause denial of service

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

CVE-2026-102993 HIGH
8.7 Sep 30

Memory-exhaustion denial of service in pypdf versions prior to 6.17.0 allows remote attackers to inflate application mem

Vendor StatusVendor

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