CVE-2026-49260: php-weasyprint: shell command injection via configurable WeasyPrint binary path due to inverted is_executable() guard (mirror of KnpLabs/snappy GHSA-vpr4-p6fq-85jc)
pontedilana/php-weasyprint builds the shell command for WeasyPrint by passing the binary path through escapeshellarg() first and then checking the quoted result with is_executable(). On POSIX escapeshellarg('/usr/local/bin/weasyprint') returns '/usr/local/bin/weasyprint' with the single-quote characters as part of the string, so is_executable() looks for a file whose actual name includes those quotes. That file never exists, the “safe” branch is dead code, and the raw $binary string (set via the constructor or setBinary()) flows directly into Symfony\Component\Process\Process::fromShellCommandline(). Any deployment whose binary path is sourced from configuration, an environment variable, or a per-tenant setting reaches a shell-command-injection sink. The library is documented as a one-to-one substitute for KnpLabs/snappy and inherited the exact pre-fix codepath KnpLabs patched in GHSA-vpr4-p6fq-85jc (Snappy 1.7.1).
References
- github.com/KnpLabs/snappy/security/advisories/GHSA-vpr4-p6fq-85jc
- github.com/advisories/GHSA-f5gc-qxf8-mh9g
- github.com/pontedilana/php-weasyprint/commit/9e86a2b317237fc5728f712f5037164530117f7e
- github.com/pontedilana/php-weasyprint/releases/tag/2.5.1
- github.com/pontedilana/php-weasyprint/security/advisories/GHSA-f5gc-qxf8-mh9g
- nvd.nist.gov/vuln/detail/CVE-2026-49260
Code Behaviors & Features
Detect and mitigate CVE-2026-49260 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Dependency Scanning using SBOM also detects vulnerabilities from proprietary advisories that this site does not include. Learn more about Dependency Scanning using SBOM →