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:

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

Severity score breakdown

References