CVE-2026-24688
Medium · 4.3CVSS
4.3
EPSS
0.5%
Published
Jan 27, 2026
CISA due date
—
Cloudanix analysis
A malicious PDF can cause affected document-processing software to get stuck and slow down or stop related services.
- Exploitation
- Local Privilege
- Attacker needs
- None
- Complexity
- Moderate
- Impact
- Denial Of Service
- Component
- Library
- Class
- Denial of service
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Affected versions of pypdf before 6.6.2 can enter a non-terminating loop when parsing a specially crafted PDF structure involving outlines/bookmarks. The flaw is triggered when application code accesses PDF outline/bookmark metadata, causing the parsing thread or process to consume CPU and fail to complete. The impact is denial of service: availability degradation for the worker, service, batch job, or pipeline processing the PDF. The issue does not provide code execution, data disclosure, or data modification based on the published description.
Why it matters to the business
Systems that accept or process untrusted PDF files may become slow, stuck, or unavailable if a malicious document is submitted and the application reads bookmark or outline data. This can disrupt document ingestion, file conversion, indexing, search, compliance review, customer upload workflows, or background processing queues. The risk is moderate because exploitation requires the vulnerable code path to parse outlines/bookmarks, there is no known public exploit maturity, EPSS is low at 0.00388, and the vulnerability is not listed in CISA KEV or associated with ransomware; however, Internet-facing upload workflows and automated PDF processing at scale can amplify operational impact.
How an attack unfolds
An attacker first identifies an application, service, worker, or command-line workflow that uses a vulnerable pypdf version and accepts PDFs from untrusted or semi-trusted sources. The attacker then crafts a PDF with malformed or cyclic outline/bookmark structures that trigger the vulnerable parser behavior. When the target system opens the PDF and application logic accesses the document outlines or bookmarks, pypdf enters an infinite loop rather than terminating normally. The affected process may peg CPU, hang a worker, block a request, or stall a queue item. Repeated submissions can exhaust worker capacity and cause broader service degradation, especially in systems without file-processing timeouts, job isolation, or resource limits.
How to fix it
Upgrade pypdf to version 6.6.2 or later. For source-based consumers of py-pdf/pypdf, ensure the fix containing commit ad47d50fd7475650d71913c8c0927e9a79249c75 is present. For Chainguard prometheus-elasticsearch-exporter packaging, upgrade to 1.9.0-r48 or later where applicable. If an immediate upgrade is not possible, manually apply the upstream changes from PR #3610, disable or avoid outline/bookmark parsing for untrusted PDFs where feasible, and add defensive controls around PDF processing: per-file timeouts, CPU and memory limits, worker isolation, queue retry limits, maximum processing duration, and rejection/quarantine of files that exceed parsing thresholds.
How to confirm the fix worked
Confirm dependency resolution shows pypdf 6.6.2 or later in all runtime images, virtual environments, lockfiles, and packaged applications. For Chainguard images or packages, verify prometheus-elasticsearch-exporter is 1.9.0-r48 or later where that package is in use. Review software composition analysis, pip freeze, poetry.lock, requirements files, container SBOMs, and deployed image manifests for older pypdf versions. Functionally validate by running PDF-processing tests that exercise outline/bookmark access and confirm malformed PDFs terminate within expected time limits. Operationally validate that PDF workers enforce timeouts and resource controls so a single file cannot monopolize a worker indefinitely.
Typical attack path
- Identify a PDF upload, ingestion, conversion, indexing, or analysis workflow that uses pypdf before 6.6.2.
- Confirm or infer that the workflow accesses PDF outlines/bookmarks, not just page content.
- Create a PDF with a malicious outline/bookmark structure that causes non-terminating traversal in vulnerable pypdf versions.
- Submit or deliver the crafted PDF to the target workflow.
- Wait for the application or worker to parse the PDF and access outlines/bookmarks.
- Cause the affected process or job to hang, consume CPU, and reduce processing capacity.
- Optionally repeat submissions to tie up multiple workers or create a backlog.
How to detect it
Look for evidence of denial-of-service behavior in systems that processed PDFs while running pypdf before 6.6.2. Relevant log sources include application logs for upload and document-processing services, worker/job queue logs, container and process telemetry, endpoint CPU metrics, orchestration events, web access logs for PDF uploads, and error-monitoring traces around PDF parsing. Focus on time windows where PDF workers show sustained high CPU, unusually long job duration, stuck tasks, queue backlog, timeout events, forced restarts, or repeated processing attempts for the same PDF. Investigate uploaded PDFs immediately preceding hangs, especially files after which logs stop progressing during outline/bookmark extraction. Because exploitation may only manifest as a hang rather than an exception, absence of stack traces or explicit errors does not rule it out. If forensic access is available, preserve suspect PDFs and inspect worker stack traces or core dumps for execution inside pypdf outline/bookmark parsing routines. There are no known public campaign-specific indicators, threat actor associations, ransomware use, or reliable malicious file hashes for this vulnerability from the provided intelligence.
What your security team should do
- Inventory applications, services, containers, and batch jobs that use pypdf and process PDFs from users, partners, email, web uploads, APIs, or other untrusted sources.
- Prioritize remediation for externally reachable upload paths, automated ingestion services, high-volume document pipelines, and workflows that access PDF outlines or bookmarks.
- Upgrade pypdf to 6.6.2 or later and rebuild/redeploy affected containers and serverless artifacts; upgrade Chainguard prometheus-elasticsearch-exporter to 1.9.0-r48 or later if present.
- Add or verify processing timeouts, worker-level CPU limits, memory limits, and queue controls for all PDF parsing workloads.
- Temporarily disable bookmark/outline extraction for untrusted PDFs if patching is delayed.
- Monitor PDF-processing services for abnormal CPU saturation, long-running jobs, repeated worker restarts, queue growth, and repeated processing of the same or similar PDF files.
- Add regression tests using malformed PDF metadata structures to ensure parsers fail safely rather than hanging.
- Because the issue is not KEV-listed, has low EPSS, and has no known exploit maturity, treat it as lower priority than actively exploited vulnerabilities, but still remediate in exposed document-processing paths.
The record
pypdf is a free and open-source pure-python PDF library. An attacker who uses an infinite loop vulnerability that is present in versions prior to 6.6.2 can craft a PDF which leads to an infinite loop. This requires accessing the outlines/bookmarks. This has been fixed in pypdf 6.6.2. If projects cannot upgrade yet, consider applying the changes from PR #3610 manually.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| PyPI | pypdf | 0 | 6.6.2 |
| Chainguard | nemo | 0 | 2.6.1-r4 |
| Chainguard | open-webui | 0 | 0.8.3-r1 |
| Wolfi | open-webui | 0 | 0.8.3-r1 |
| openSUSE:Tumbleweed | python-pypdf | 0 | 6.6.2-1.1 |
Related vulnerabilities
- CVE-2026-28804 pypdf is a free and open-source pure-python PDF library. Also affects pypdf
- GHSA-9m86-7pmv-2852 pypdf vulnerable to inefficient decoding of ASCIIHexDecode streams Also affects pypdf
- CVE-2026-28351 pypdf is a free and open-source pure-python PDF library. Also affects pypdf
- GHSA-x7hp-r3qg-r3cj pypdf: Manipulated FlateDecode XFA streams can exhaust RAM Also affects pypdf
- CVE-2026-27888 pypdf is a free and open-source pure-python PDF library. Also affects pypdf
- GHSA-2rw7-x74f-jg35 pypdf has a possible infinite loop when loading circular /Prev entries in cross-reference… Also affects pypdf
- CVE-2026-27628 pypdf is a free and open-source pure-python PDF library. Also affects pypdf
- CVE-2026-27026 pypdf is a free and open-source pure-python PDF library. Also affects pypdf