Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSubmit attacker-controlled URL to app
-
ExploitInject cmd.exe metacharacter (&) via setUrl()
-
ExecutionUnescaped string reaches PHP exec() on Windows
-
ImpactExecute 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
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
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().
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
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.
Articles & Coverage 1
Executive ViewAI
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.
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
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
OS command injection occurs when an application passes unsanitized user input directly into system shell commands.
EUVD-2026-101274
GHSA-j7cw-xwmc-w7qg
NVD
CVE.org
EPSS
Exploit-DB