CVE-2026-49286: PhpWeasyPrint vulnerable to PHAR deserialization via output filename (CVE-2023-28115 case-insensitive bypass)
pontedilana/php-weasyprint guarded the output filename against the phar:// stream wrapper with a case-sensitive blacklist:
if (0 === \strpos($filename, 'phar://')) {
throw new \InvalidArgumentException('The output file cannot be a phar archive.');
}
PHP stream wrappers are case-insensitive, so PHAR://, Phar://, etc. bypass the check and reach fileExists() (file_exists()) in prepareOutput(). On PHP 7 (which the library still supports — PHP 7.4+), this triggers deserialization of a crafted PHAR archive’s metadata, leading to remote code execution. This is the patch-bypass of CVE-2023-28115.
The same issue and fix were handled upstream in KnpLabs/snappy (GHSA-92rv-4j2h-8mjj).
References
- github.com/KnpLabs/snappy/security/advisories/GHSA-92rv-4j2h-8mjj
- github.com/advisories/GHSA-2fmj-p74r-3wjm
- github.com/pontedilana/php-weasyprint/commit/d1aa487722b5a3cab9b222b85fdb5608a5a550c3
- github.com/pontedilana/php-weasyprint/releases/tag/2.6.0
- github.com/pontedilana/php-weasyprint/security/advisories/GHSA-2fmj-p74r-3wjm
- nvd.nist.gov/vuln/detail/CVE-2026-49286
Code Behaviors & Features
Detect and mitigate CVE-2026-49286 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →