CVE-2026-49359: PhpWeasyPrint vulnerable to SSRF and local file disclosure via the attachment option
pontedilana/php-weasyprint fetches the content of option values server-side via file_get_contents() when the value looks like a URL, without restricting the URL scheme. The attachment option of Pdf is the reachable sink: any value that passes isOptionUrl() (filter_var(..., FILTER_VALIDATE_URL)) is downloaded by the PHP process and embedded into the generated PDF. Because FILTER_VALIDATE_URL accepts http, https, ftp, file and PHP stream wrappers such as php://, an attacker who can influence the attachment value reaches both a Server-Side Request Forgery primitive (e.g. internal HTTP endpoints, cloud metadata) and a local file disclosure primitive (file://, php://filter/...), with the fetched bytes exfiltrated as a PDF attachment.
This is the same class of issue KnpLabs/snappy patched for its xsl-style-sheet option in GHSA-c5fp-p67m-gq56. The library is documented as a one-to-one substitute for KnpLabs/snappy and shares the same code shape.
References
- github.com/KnpLabs/snappy/security/advisories/GHSA-c5fp-p67m-gq56
- github.com/advisories/GHSA-x8g9-h984-pc36
- github.com/pontedilana/php-weasyprint/commit/9582dcf119a405276cf55e9e10bc577a887792cb
- github.com/pontedilana/php-weasyprint/releases/tag/2.6.0
- github.com/pontedilana/php-weasyprint/security/advisories/GHSA-x8g9-h984-pc36
- nvd.nist.gov/vuln/detail/CVE-2026-49359
Code Behaviors & Features
Detect and mitigate CVE-2026-49359 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 →