Cloudanix VulnDB

CVE-2026-22690

None

CVSS

—

EPSS

0.4%

Published

Jan 10, 2026

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

A malformed PDF can make affected document-processing software spend too long trying to read it, potentially slowing or disrupting services that handle uploaded files.

Exploitation
Requires User Interaction
Attacker needs
User Interaction
Complexity
Low
Impact
Denial Of Service
Component
Library
Class
Denial of service
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

The flaw is an algorithmic denial-of-service condition in pypdf's non-strict PDF parsing path before version 6.6.0. A malformed PDF trailer that omits the required /Root entry but declares an artificially large /Size value can cause the reader to spend excessive time attempting to resolve objects in an invalid file. The issue does not provide code execution, data disclosure, or privilege escalation by itself; its impact is resource exhaustion, long processing times, worker starvation, request timeouts, and degraded availability in services that parse untrusted PDFs using affected pypdf versions in non-strict mode.

Why it matters to the business

Systems that accept or process user-supplied PDFs can be slowed or made unavailable by specially crafted invalid documents. This can disrupt document ingestion, case processing, billing, reporting, e-signature, archive, or content-extraction workflows that depend on PDF parsing. The EPSS score is low and there is no known CISA KEV listing or ransomware association, so broad opportunistic exploitation is not currently indicated; however, the vulnerability is easy to trigger anywhere untrusted PDFs are processed and can still be operationally disruptive, especially in queues or synchronous upload paths.

How an attack unfolds

An attacker identifies an application, API, batch job, or background worker that accepts PDF uploads or fetches PDFs from external sources and processes them with a vulnerable pypdf release in non-strict mode. The attacker creates an invalid PDF whose trailer has no /Root object but includes a very large /Size value. When the application attempts to read the file, pypdf follows the affected parsing path and spends an excessive amount of time trying to handle object references for a file that should be rejected quickly. Repeated submissions can tie up web workers, task queue consumers, or CPU resources, leading to delayed processing, timeouts, autoscaling cost increases, or service degradation. Exploitation does not require authentication if PDF ingestion is exposed anonymously; otherwise it requires whatever access is needed to submit PDFs to the affected workflow.

How to fix it

Upgrade pypdf to version 6.6.0 or later. If tracking the upstream Git repository directly, use a version that includes commit 10df9c72fa7fb9ab14101b9cb911d66e680282a8 or later. For Debian-packaged inetutils entries provided in the advisory data, use the fixed package versions where applicable: Debian 11 fixed in 2:2.0-1+deb11u2, Debian 12 fixed in 2:2.4-2+deb12u1, and Debian 13 fixed in 2:2.4-3. In addition to upgrading, apply defensive controls around PDF processing: enforce file size limits, use parser execution timeouts, process documents in isolated workers, limit queue concurrency per sender or tenant, reject structurally invalid PDFs early when possible, prefer strict parsing where compatible, and rate-limit unauthenticated or high-volume PDF submissions.

How to confirm the fix worked

Confirm the installed pypdf version is 6.6.0 or later using package inventory, dependency lock files, container image scans, or runtime checks such as Python package metadata. Review application code for use of pypdf PdfReader or equivalent parsing paths with strict=False, since the vulnerable behavior is associated with non-strict reading mode. Test a staging environment with malformed PDFs that lack a trailer /Root and contain large /Size values and verify they are rejected quickly, time out safely, or fail without tying up workers. Validate that document-processing services enforce maximum file size, maximum processing duration, worker isolation, and retry limits. For Debian systems listed in the advisory data, verify the installed package versions meet or exceed the fixed versions stated in the remediation guidance.

Typical attack path

  1. Find a service or workflow that parses user-controlled PDF files using pypdf before 6.6.0.
  2. Confirm that malformed PDFs are accepted far enough to reach the pypdf parsing layer.
  3. Craft an invalid PDF trailer that omits /Root while declaring an unusually large /Size value.
  4. Submit the malformed PDF through an upload form, API endpoint, email ingestion route, document-processing queue, or other PDF intake channel.
  5. Trigger pypdf's non-strict reader path and cause long runtimes while the parser attempts to process the invalid structure.
  6. Repeat or parallelize submissions to exhaust parser workers, increase queue depth, or cause user-facing timeouts.

How to detect it

Look for evidence of unusually slow or failed PDF parsing jobs after receipt of malformed PDFs. Relevant sources include application upload logs, API gateway and web server access logs, background job or task queue logs, worker stdout/stderr, Python exception traces, container metrics, EDR process telemetry, object storage access logs for uploaded PDFs, and APM traces for document-processing endpoints. Indicators include repeated PDF submissions from the same source, small or oddly structured PDFs that cause disproportionate CPU time, parser jobs that run until timeout, increased queue depth, worker restarts, and Python stack traces or errors from pypdf while resolving document trailers or root objects. For forensic file review, inspect suspicious PDFs for a trailer dictionary containing an extremely large /Size value and no /Root entry. Because exploitation artifacts are malformed PDF content rather than a stable network payload, detection should combine content inspection, timeout/error telemetry, and source-rate correlation.

  • pypdf.errors.PdfReadError
  • PdfReadError
  • Cannot find Root object
  • Root object not found
  • /Root object
  • pypdf._reader
  • strict=False
  • trailer
  • /Size
  • Worker timeout
  • TimeoutError
  • PDF parsing timed out
  • document processing timed out
  • queue timeout
  • %PDF-

What your security team should do

  • Prioritize patching internet-facing or externally fed PDF ingestion services, document-processing APIs, email-to-PDF workflows, and background queues that parse untrusted PDFs with pypdf.
  • Upgrade pypdf to 6.6.0 or later and rebuild/redeploy containers, serverless packages, and worker images that vendor or pin the dependency.
  • Search dependency manifests and software composition analysis results for pypdf versions earlier than 6.6.0, including transitive dependencies bundled in applications.
  • Identify code paths using non-strict parsing mode and change to strict parsing where business functionality allows.
  • Add processing timeouts, queue retry caps, per-sender rate limits, and resource isolation for PDF parsing jobs to reduce DoS impact from malformed files.
  • Monitor document-processing latency, queue depth, worker CPU saturation, and parser timeout/error rates for spikes associated with malformed PDF submissions.
  • Preserve suspicious submitted PDF samples and related request metadata when parser timeouts or excessive runtimes occur to support forensic review.

The record

pypdf is a free and open-source pure-python PDF library. Prior to version 6.6.0, pypdf has possible long runtimes for missing /Root object with large /Size values. An attacker who uses this vulnerability can craft a PDF which leads to possibly long runtimes for actually invalid files. This can be achieved by omitting the /Root entry in the trailer, while using a rather large /Size value. Only the non-strict reading mode is affected. This issue has been patched in version 6.6.0.

Affected packages

Ecosystem Package Introduced Fixed
PyPI pypdf 0 6.6.0
Chainguard open-webui 0 0.7.2-r0
Wolfi open-webui 0 0.7.2-r0
openSUSE:Tumbleweed python-pypdf 0 6.6.0-1.1

Related vulnerabilities