pypdf: Resource exhaustion via many embedded files in crafted PDF
Summary
pypdf, a pure-Python library for reading and manipulating PDF files, reparses the full attachment list for each lookup when an application accesses embedded files through the dictionary-based API. A crafted PDF with many embedded files causes long runtimes, which can slow or block the processing service (denial of service). The attack requires that an application reads the embedded files of untrusted PDFs; no confidentiality or integrity impact is stated.
Affected
- pypdf versions before 6.19.0
Fixed in
- pypdf 6.19.0 (vendor fix, GHSA-v247-6f48-mgcj). Later releases also include the fix.
Workaround
- If an upgrade is not possible yet, apply the changes from PR #4081 (developer task).
- Stop reading attachments from untrusted PDFs and limit job run time.
Exploitation
- No known exploitation in the wild.
- No public proof of concept found in our research.
- CISA SSVC: exploitation none, automatable yes, technical impact partial.
Our recommendation
- Inventory Python environments, containers and lockfiles for pypdf, including transitive dependencies.
- Upgrade to pypdf 6.19.0 or later, preferably the latest release.
- For services that accept untrusted PDFs, enforce job timeouts and resource limits until patched.
- Verify after the upgrade that no older pypdf copy remains in container images.
Public exploits
PoC-in-GitHub, Metasploit and Exploit-DB list nothing for this CVE.
Research sources
- GitHub Security Advisory GHSA-v247-6f48-mgcj github.com
- pypdf release 6.19.0 github.com
- Fix commit 6b10556 github.com
- Pull request #4081 github.com
- GitLab Advisory Database entry CVE-2026-102999 advisories.gitlab.com
- OSV entry CVE-2026-102999 osv.dev
Researched and written up in English and German by an AI (Claude by Anthropic) based on NVD, CISA, EPSS and the sources listed. The vendor information is authoritative. Researched on 1 Nov 2026, 06:26.
Original description (NVD)
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.
Sources
The tracker combines official, freely usable data sources – updated continuously:
- NVD (NIST) – CVEs, rating (CVSS), affected products
- CISA KEV – vulnerabilities confirmed by CISA as actively exploited
- CISA Vulnrichment – CISA assessment (SSVC) in the official CVE record
- FIRST EPSS – probability of exploitation
- Microsoft MSRC – Patch Tuesday: vulnerabilities, severity, updates
- PoC-in-GitHub – public proof-of-concept repositories
- Metasploit (Rapid7) – modules of the Metasploit Framework
- Exploit-DB (OffSec) – archive of public exploits (links only)
- Patch days: official vendor pages (linked per vendor) (Vendor patch days)
This product uses data from the NVD API but is not endorsed or certified by the NVD. EPSS data © FIRST.org.
Affected? We can help.
We check whether your systems are affected, install updates and close the gap – continuously with the System Health Checker if you wish.
