CVE-2026-46643
Published: June 10th, 2026
Snappy is a PHP library allowing thumbnail, snapshot or PDF generation from a url or a html page. Prior to version 1.7.1, on POSIX, escapeshellarg(‘/usr/bin/wkhtmltopdf’) returns the literal string ‘/usr/bin/wkhtmltopdf’ with the single-quote characters included. is_executable() then looks for a file whose actual name contains those quote characters, which essentially never exists. The safe branch is dead code and $command always falls through to the raw, unescaped value. The rest of the arguments (options, input, output) are escaped correctly, so injection has to land in the binary string itself. That happens whenever the binary path is sourced from configuration that is user-influenced, derived from environment variables that ultimately come from request data, or concatenated with any user-controlled fragment. This issue has been patched in version 1.7.1.
Unknown
CVSS v2:
CVSS v2:
Status
| DocFilters Release | Package | State | Justification | Comment |
|---|---|---|---|---|
| 26.3 | snappy (1.1.3) | False Positive | Code Not Present | This CVE affects the KnpLabs/snappy PHP library (advisory GHSA-vpr4-p6fq-85jc), an OS command injection (CWE-78) where escapeshellarg()/is_executable() misuse leaves the raw, unescaped binary path flowing into the shell command, fixed in KnpLabs/snappy 1.7.1. Document Filters bundles the unrelated Google Snappy C++ compression library (version 1.1.3, external/snappy-1.1.3), which contains no PHP code, no escapeshellarg()/is_executable()/setBinary() logic, and no shell-command construction. No .php files exist in the codebase. This is the upstream KnpLabs/snappy original of the same OS command injection already tracked here as CVE-2026-49260 (its PhpWeasyPrint downstream), and shares the library-name confusion with sibling false positives CVE-2023-28115, CVE-2026-46683, CVE-2026-49286, CVE-2026-49358 and CVE-2026-49359. |
| 26.2 | snappy (1.1.3) | Needs Triage | ||
| 26.1 | snappy (1.1.3) | Needs Triage | ||
| 25.4 | snappy (1.1.3) | Needs Triage | ||
| 25.3 | snappy (1.1.3) | Needs Triage | ||
| 25.2 | snappy (1.1.3) | Needs Triage | ||
| 25.1 | snappy (1.1.3) | Needs Triage | ||
| 24.4 | snappy (1.1.3) | Needs Triage | ||
| 24.4.0 | snappy (1.1.3) | Needs Triage | ||
| 24.3 | snappy (1.1.3) | Needs Triage | ||
| 24.2 | snappy (1.1.3) | Needs Triage | ||
| 24.1 | snappy (1.1.3) | Needs Triage | ||
| 23.3 | snappy (1.1.3) | Needs Triage | ||
| 23.2 | snappy (1.1.3) | Needs Triage | ||
| 23.1 | snappy (1.1.3) | Needs Triage | ||
| 22.4 | snappy (1.1.3) | Needs Triage | ||
| 22.3 | snappy (1.1.3) | Needs Triage | ||
| 22.2 | snappy (1.1.3) | Needs Triage | ||
| 22.1 | snappy (1.1.3) | Needs Triage | ||
| 21.11 | snappy (1.1.3) | Needs Triage | ||
| 21.8 | snappy (1.1.3) | Needs Triage | ||
| 21.5.0 | snappy (1.1.3) | Needs Triage | ||
| 21.2.0 | snappy (1.1.3) | Needs Triage | ||
| 11.4.19.3667 | snappy (1.1.3) | Needs Triage | ||
| 11.4.18.3599 | snappy (1.1.3) | Needs Triage | ||
| 11.4.16.3445 | snappy (1.1.3) | Needs Triage | ||
| 11.4.15.3368 | snappy (1.1.3) | Needs Triage | ||
| 11.4.14.3263 | snappy (1.1.3) | Needs Triage | ||
| 11.4.13.3179 | snappy (1.1.3) | Needs Triage | ||
| 11.4.12.3054 | snappy (1.1.3) | Needs Triage | ||
| 11.4.11.3040 | snappy (1.1.3) | Needs Triage | ||
| 11.4.11.2990 | snappy (1.1.3) | Needs Triage | ||
| 11.4.10.2934 | snappy (1.1.3) | Needs Triage | ||
| 11.4.9.2878 | snappy (1.1.3) | Needs Triage | ||
| 11.4.8.2822 | snappy (1.1.3) | Needs Triage |