Skip to main content

Snappdf CVE-2026-110646

| EUVDEUVD-2026-101274 CRITICAL
OS Command Injection (CWE-78)
2026-10-14 VulnCheck GHSA-j7cw-xwmc-w7qg
9.2
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Submit attacker-controlled URL to app
  2. Exploit
    Inject cmd.exe metacharacter (&) via setUrl()
  3. Execution
    Unescaped string reaches PHP exec() on Windows
  4. Impact
    Execute arbitrary commands as PHP process

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization OS command sanitization, avoid shell exec
MITRE ATT&CK

2 techniques across 1 tactic: Execution

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires all of: (1) the affected product runs on Windows, since only the executeOnWindows() code path builds a shell string passed to exec() - Linux/macOS use an argv array and are not vulnerable; (2) the host application passes attacker-influenced data into the setUrl() value (modeled as AT:P in the CVSS 4.0 vector), so a URL that is fully static/trusted is not exploitable; (3) an installed version in the range 1.1.0 through before 6.1.0. The injection uses cmd.exe metacharacters such as '&'. No authentication is required per PR:N. The limiting factors are the Windows-only platform dependency and the need for the integrating application to feed untrusted input into setUrl().

Impact

This is a genuine high-priority issue where exploitable, but its real-world reach is narrowed by two concrete gates. The CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:N) with VC:H/VI:H/VA:H and the source-code diff both confirm unauthenticated remote OS command injection yielding full confidentiality, integrity and availability loss as the PHP process. However, the AT:P (attack requirement) metric is doing real work here: exploitation is only possible when the host application actually routes attacker-influenced data into setUrl(), and ONLY on Windows, where the removed executeOnWindows() built a shell string via exec(implode(' ', $commands)). On Linux/macOS the argv-based execution was never vulnerable, so the practical exploitable population is limited to Windows deployments that expose user-controlled URLs. No EPSS score was provided and the product is not in CISA KEV, and no POC is indicated in the input - so there is no public exploit identified at time of analysis. The vulnerability is confirmed by VulnCheck and the vendor patch/commit, so the technical reality is solid; the 9.2 score is defensible for affected Windows setups but overstates risk for the Linux/macOS majority of PHP deployments, which are unaffected.

Exploit ScenarioDerived

A Windows-hosted PHP/Laravel application uses snappdf to render a user-supplied URL into a PDF and passes that URL to setUrl(). An unauthenticated attacker submits a value containing cmd.exe metacharacters (e.g. 'http://x/&calc.exe'), which executeOnWindows() concatenates and passes unescaped to PHP exec(), running arbitrary commands as the web/PHP process. No public exploit is identified at time of analysis; the flaw is fixed in 6.1.0 by executing the browser via a Symfony Process argv array that escapes arguments on Windows.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
Patch available 2.1% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 14, 2026

OS command injection on Windows in Beganovich Snappdf versions 1.1.0 through 6.0.x lets remote attackers execute arbitrary operating-system commands as the PHP process by feeding cmd.exe metacharacters (such as '&') into the URL passed to setUrl(). Because the vulnerable code path is built only when the library runs on Windows, the issue is exploitable only when the integrating PHP application runs on Windows and passes attacker-influenced data into setUrl(); a fully static or trusted URL is not exploitable. The CVSS v4.0 vector (AV:N/PR:N/UI:N) indicates the injection can be triggered remotely without authentication, giving high confidentiality, integrity, and availability impact on the host, although no public exploit code or confirmed in-the-wild exploitation has been identified at time of analysis.

RemediationAI

Upgrade to Snappdf 6.1.0, the release that removes the Windows-specific shell path and runs the Chromium binary through a Symfony Process argv array on all platforms (upstream PR https://github.com/beganovich/snappdf/pull/54, commit https://github.com/beganovich/snappdf/commit/5197bd3bcc4df44e17246dbceea9ce51eb390eae, release https://github.com/beganovich/snappdf/releases/tag/v6.1.0); vendor-released patch: 6.1.0. If upgrading is not immediately possible, the most effective compensating control is to run the rendering workload on Linux or macOS, where the vulnerable branch is never taken - the trade-off is a platform migration or a separate rendering host, and this depends on the affected code path only on Windows. Alternatively, strictly validate and normalize every value passed to setUrl() in the host application with an allowlist of expected schemes/hosts and reject or percent-encode characters such as &, |, ^, <, >, and % so cmd.exe metacharacters cannot reach the shell (this requires auditing all call sites that emit attacker-influenced URLs and is a code-level control that can be bypassed if any path is missed). Reducing the privileges of the PHP/worker process limits the blast radius of any successful injection but does not remove the flaw, and monitoring/EDR rules for unexpected child processes spawned by PHP (for example cmd.exe invoked from a PDF-rendering worker) provide only detective coverage. Apply the 6.1.0 upgrade as the primary fix and treat the other measures as interim risk reduction only.

Affected VersionsENISA

snappdf 1.1.0 <6.1.0

Affected Packages

euvd snappdf fix: 6.1.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Snappdf is a PHP library that renders HTML to PDF by invoking a headless Chromium/Chrome binary through Symfony Process. The root cause is CWE-78 (Improper Neutralization of Special Elements used in an OS Command): prior to 6.1.0, Snappdf branched on the detected platform and, on Windows, handed the command array to a private executeOnWindows() method that collapsed it with implode(' ', $commands), appended ' 2>&1', and passed the resulting shell string to PHP's exec(). Because exec() on Windows routes through cmd.exe, any unescaped shell metacharacter reaching that string - notably '&' injected through the setUrl() value - terminates the intended Chrome invocation and starts an attacker-chosen command running under the privileges of the PHP process. The Linux/macOS paths never built a shell string: they used Symfony Process with an argv array, which escapes arguments correctly, so only the Windows branch is affected. The upstream fix (PR #54, commit 5197bd3) removes executeOnWindows() entirely and runs the browser via an argv array on every platform, letting Symfony Process handle Windows escaping, while also expanding CI to ubuntu-latest, windows-latest, and macos-latest so the platform-specific regression is caught. The affected CPE is cpe:2.3:a:beganovich:snappdf:*:*:*:*:*:*:*:* for versions 1.1.0 up to but not including 6.1.0.

Know when Snappdf gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (VulnCheck) PRIMARY 9.2 CRITICAL
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
vuln.today AI 8.1 HIGH

Unauthenticated remote code execution (PR:N) with full C/I/A impact, but AC:H reflects the Windows-only path plus the requirement that the app feed attacker-influenced input into setUrl().

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

Beganovich snappdf from 1.1.0 before 6.1.0 contains an OS command injection vulnerability on Windows that allows attackers to run commands by influencing the rendered URL. Attackers can supply cmd.exe metacharacters such as & in the setUrl() value, which executeOnWindows() passes unescaped to PHP exec(), executing commands as the PHP process.

Executive ViewAI

Why It Matters

A critical remote code execution flaw affects the Beganovich Snappdf PHP PDF-generation library (versions 1.1.0 through 6.0.x) as used by our Windows-hosted PHP applications. Any internet-facing service that builds PDFs from user-supplied URLs could allow an unauthenticated attacker to run arbitrary operating system commands on the web server, risking full compromise of the host and any data or downstream systems it can reach. Because no exploitation has been observed yet, this is a pre-emptive patch priority rather than an active incident.

Business Impact: High
Compensating Controls

Patch available per vendor advisory. Until the upgrade is complete, validate and reject cmd.exe metacharacters ('&', '|', ';', '%', '>' and similar) in any URL supplied to setUrl(), replace dynamic URLs with a static allowlist of trusted sources, run affected PHP services under a least-privilege Windows account with no interactive logon rights, and restrict outbound network and command-execution egress from those hosts.

Threat Intelligence Overview

EPSS Score
2.1%
Top 18% exploitable
Prevalence
Low
niche PHP/Laravel PDF library; Windows-only code path further narrows footprint
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC No
EPSS 2.1%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
High

Priority Score

48
Low Medium High Critical
KEV: 0
EPSS: +2
CVSS: +46
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

OS command injection occurs when an application passes unsanitized user input directly into system shell commands.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy