HIGH 7.5

CVE-2026-38970: pdfcpu Uncontrolled Recursion Denial-of-Service (CVSS 7.5)

pdfcpu, a PDF processing library, has a denial-of-service vulnerability through version 0.11.1. The issue stems from the parser recursively processing nested PDF objects without limits on how deeply it will descend. An attacker can craft a malicious PDF file with excessive nesting to exhaust server memory and crash the application, denying service to legitimate users.

Source data · NVD / CISA · public domain

CVSS
3.1 · 7.5 HIGH · CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weaknesses (CWE)
CWE-674
Affected products
0 configuration(s)
Published / Modified
2026-07-02 / 2026-07-06

NVD description (verbatim)

pdfcpu through v0.11.1 contains an uncontrolled-recursion denial-of-service issue in pkg/pdfcpu/model/parse.go. The parser descends recursively through nested PDF objects, including arrays, via ParseObjectContext() and parseArray() without enforcing a maximum nesting depth.

3 reference(s) · View on NVD →

SEC.co analysis · AI-assisted, reviewed against source

Technical summary

CVE-2026-38970 is an uncontrolled-recursion denial-of-service vulnerability in pdfcpu's PDF parsing logic. The vulnerable code paths—ParseObjectContext() and parseArray() in pkg/pdfcpu/model/parse.go—lack maximum recursion depth enforcement when traversing nested PDF arrays and objects. A specially crafted PDF with deeply nested structures can trigger stack exhaustion or heap memory depletion, causing the parser to crash or hang. This flaw affects pdfcpu through v0.11.1 and is tracked under CWE-674 (Uncontrolled Recursion).

Business impact

Any service or application embedding pdfcpu to process user-supplied or untrusted PDF documents faces availability risk. A single malicious PDF upload could crash a batch processing service, web application, or document management system. Organizations operating PDF-as-a-service platforms, automated document workflows, or API endpoints that accept PDF files should prioritize assessment. Recovery typically requires service restart, and repeated attacks can disrupt business continuity.

Affected systems

pdfcpu v0.11.1 and earlier versions are vulnerable. Applications written in Go that depend on pdfcpu for PDF parsing are at risk. This includes web servers, batch processors, document conversion tools, and any microservice handling untrusted PDF input. The vendor product list has not been populated in the advisory; organizations should audit their own dependencies using package managers (go.mod, go.sum) and dependency scanning tools to identify internal or third-party use.

Exploitability

Exploitability is straightforward: an attacker needs only to craft a PDF with excessive object nesting and deliver it to a vulnerable parser. No authentication, special privileges, or user interaction is required—the CVSS vector indicates network accessibility (AV:N), low complexity (AC:L), and no authentication (PR:N). Public availability of exploit code or proof-of-concept files has not been confirmed, but the attack surface is broad for any public-facing PDF upload functionality.

Remediation

Upgrade pdfcpu to a patched version above v0.11.1 as soon as one is available. Until patching is possible, implement depth-limiting validation on PDF inputs: reject files where the nesting depth of arrays and objects exceeds a reasonable threshold (typically 20–50 levels, depending on legitimate use cases). Network-level controls such as file size limits and timeouts on parsing operations provide temporary mitigation but are not sufficient as primary fixes. Monitor for signs of exploitation (sudden CPU/memory spikes, service crashes).

Patch guidance

Check the official pdfcpu repository and release notes for versions after v0.11.1 that address this vulnerability. Update your go.mod dependency specification to require the patched version, run 'go get -u github.com/pdfcpu/pdfcpu@<patched-version>', and rebuild your application. Verify the patch in a staging environment before production rollout. Coordinate patching across all internal services and third-party products that embed pdfcpu.

Detection guidance

Monitor application logs and metrics for crashes or hangs during PDF parsing, especially if they coincide with unusual PDF submissions. Implement intrusion detection signatures that flag PDF uploads with excessive nesting depth (e.g., counting opening brackets in the file structure). Log parser errors and stack traces. In a detection lab, test your monitoring by feeding a proof-of-concept nested-PDF payload and confirming alerts fire. Use dynamic analysis or fuzzing to identify other potential recursion issues in PDF processing code.

Why prioritize this

This vulnerability scores CVSS 7.5 (HIGH) due to network accessibility, no authentication requirement, and high impact on availability. While confidentiality and integrity are not compromised, denial-of-service attacks disrupt service. Organizations with public-facing PDF intake should patch within 30 days; internal tools with restricted access may have slightly longer windows. The lack of KEV status and public exploit confirmation suggests exploits are not yet weaponized at scale, but the low barrier to crafting a malicious PDF means proactive patching is essential.

Risk score, explained

The CVSS 3.1 score of 7.5 reflects: Network-accessible attack vector (AV:N) with low complexity (AC:L), no authentication or user interaction required (PR:N, UI:N), and a scope that is unchanged (S:U). The impact is entirely on availability (A:H), with no confidentiality or integrity loss (C:N, I:N). This is a classic high-severity availability risk suitable for critical infrastructure and customer-facing services. The score does not account for compensating controls you may have in place (input validation, resource limits); assess your specific environment's risk accordingly.

Frequently asked questions

What versions of pdfcpu are affected?

pdfcpu through v0.11.1 is vulnerable. Check your go.mod or dependency manifest to confirm your version. The advisory does not list a patched version yet; consult the official pdfcpu GitHub repository for available updates.

Can I work around this without upgrading?

Partial mitigation is possible through strict input validation: limit PDF file size, impose parsing timeouts, and reject PDFs with nesting depth exceeding safe thresholds (validate the PDF structure before passing it to pdfcpu). However, these are temporary measures—patching remains the definitive fix.

How do I know if my application is affected?

Grep your codebase or dependency tree for pdfcpu imports. Run 'go list -m all' to see all transitive dependencies. Confirm the pdfcpu version in your go.mod. If you use third-party libraries for PDF handling, check their dependency trees as well.

Is there active exploitation of this vulnerability?

As of the advisory publication, this vulnerability is not on CISA's known exploited vulnerabilities (KEV) list, suggesting no widespread, weaponized exploits. However, the low complexity of the attack means threat actors could craft malicious PDFs opportunistically. Treat this as a high-priority proactive fix, not a reactive incident response.

This analysis is based on the CVE record published 2026-07-02 and last modified 2026-07-06. Patch availability, version numbers beyond v0.11.1, and specific vendor confirmations should be verified directly with the pdfcpu project and your software vendor. SEC.co makes no warranty regarding the completeness or accuracy of third-party sources. Security posture depends on your specific deployment, compensating controls, and risk tolerance. Consult your security team before implementing changes. Source: NVD (public-domain), retrieved 2026-08-11. Analysis generated by SEC.co (claude-haiku-4-5).