CVE-2026-28804: 
Python vulnerability analysis and mitigation

Overview

CVE-2026-28804 is a Denial of Service vulnerability in pypdf, a free and open-source pure-Python PDF library, caused by inefficient algorithmic complexity in the /ASCIIHexDecode filter decoder. An unauthenticated remote attacker can craft a malicious PDF file that triggers excessively long processing runtimes when the affected filter is accessed. All pypdf versions prior to 6.7.5 are affected; the issue was disclosed and patched on March 2–6, 2026. It carries a CVSS v3.1 base score of 5.3 (Medium) and a CVSS v4.0 base score of 6.9 (Medium) (GitHub Advisory, Red Hat).

Technical details

The root cause is classified as CWE-407 (Inefficient Algorithmic Complexity) and CWE-770 (Allocation of Resources Without Limits or Throttling). The vulnerable code in pypdf/filters.py implemented the ASCIIHexDecode.decode() method using a manual byte-by-byte parsing loop with repeated string concatenation (retval += bytes(...)), which exhibits poor performance characteristics on large inputs. An attacker can craft a PDF stream using the /ASCIIHexDecode filter containing a very large hex-encoded payload (e.g., b"41" * 1_200_000) that, when decoded, causes the application to consume excessive CPU time. The fix replaced the manual loop with Python's built-in binascii.unhexlify() function, which processes the data far more efficiently (GitHub Commit, GitHub PR).

Impact

Successful exploitation causes a Denial of Service by consuming significant CPU resources on the host processing the malicious PDF, leading to prolonged or indefinite hangs in the affected application. There is no impact on confidentiality or data integrity — the vulnerability is limited to availability. Applications and services that accept and process untrusted PDF files (e.g., document management systems, AI pipelines using pypdf) are most at risk, including downstream products such as IBM watsonx Orchestrate with watsonx Assistant Cartridge (GitHub Advisory, IBM Advisory).

Exploitability

No public proof-of-concept exploit code has been confirmed, and there is no evidence of in-the-wild exploitation at this time. The EPSS score is approximately 0.042%, indicating a low probability of exploitation in the near term. The vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. No threat actor attribution has been reported (Feedly).

Exploitation steps

  1. Craft a malicious PDF: Create a PDF file containing a stream object that uses the /ASCIIHexDecode filter with a very large hex-encoded payload — for example, repeating the hex pair 41 (representing the ASCII letter 'A') millions of times, followed by the EOD marker > (e.g., b"41" * 1_200_000 + b">").
  2. Deliver the PDF: Submit the crafted PDF to any service or application that uses a vulnerable version of pypdf (< 6.7.5) to process user-supplied PDF files — such as a document upload endpoint, an AI document pipeline, or a PDF parsing API.
  3. Trigger decoding: When the application accesses the malicious stream, pypdf's ASCIIHexDecode.decode() method is invoked, entering the inefficient byte-by-byte parsing loop.
  4. Achieve DoS: The application's CPU usage spikes and the processing thread hangs for an extended period, potentially causing timeouts, service unavailability, or cascading failures in dependent services (GitHub Advisory, GitHub Commit).

Indicators of compromise

  • Process: Sustained high CPU utilization by the Python process running pypdf, particularly during PDF processing operations; processing threads that hang or fail to complete within expected timeframes.
  • Logs: Application-level warnings such as "missing EOD in ASCIIHexDecode, check if output is OK" appearing in pypdf logs, which may indicate malformed or adversarially crafted input.
  • File System: Presence of unusually large PDF files submitted to upload directories or temporary processing folders, particularly those containing streams with /ASCIIHexDecode filters and very large hex payloads.
  • Network: Repeated submission of large PDF files from the same source IP to PDF-processing endpoints, potentially indicating automated DoS attempts.

Mitigation and workarounds

The primary remediation is to upgrade pypdf to version 6.7.5 or later, which replaces the inefficient manual parsing loop with Python's built-in binascii.unhexlify() function. For organizations unable to upgrade immediately, the pypdf security advisory recommends manually applying the changes from PR #3666 as a workaround. Additionally, implementing resource limits (CPU time limits, processing timeouts) on PDF processing operations and restricting the acceptance of untrusted PDF files at the network or application layer can reduce exposure (GitHub Advisory, pypdf Release).

Community reactions

Red Hat tracked the vulnerability via Bugzilla (Bug 2445118) and assigned it a medium severity rating. IBM issued an advisory noting that its watsonx Orchestrate with watsonx Assistant Cartridge product is affected due to its dependency on pypdf. OpenSUSE also issued security announcements for its python-pypdf packages. No significant broader media coverage or notable researcher commentary beyond the official advisory and patch discussion has been identified (Red Hat Bugzilla, IBM Advisory).

Additional resources

Linux Distribution fix status

Fix availability across major Linux distributions and their releases.

Debian

Fixed

bookworm

pypdf2

Affected

sid

pypdf: 6.9.0-1

Fixed

trixie

pypdf

Affected

Ubuntu

Unknown

devel

pypdf

Unknown

noble

pypdf

Unknown

noble (esm-apps)

pypdf

Unknown

resolute

pypdf

Unknown

resolute (esm-apps)

pypdf

Unknown

RHEL / CentOS

Unknown

Source: This report was generated using AI

Related Python vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

GHSA-v2f8-6655-7grjCRITICAL10
  • Python logoPython
  • vibe-trading-ai
NoYesOct 02, 2026
CVE-2026-105782HIGH7.5
  • Python logoPython
  • scrapy
NoYesOct 06, 2026
GHSA-v853-p72q-4cfwHIGH7.5
  • Python logoPython
  • quart
NoYesOct 05, 2026
CVE-2026-105751MEDIUM6.9
  • Python logoPython
  • docling
NoYesOct 05, 2026
CVE-2026-105750MEDIUM5.9
  • Python logoPython
  • docling
NoYesOct 05, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management