{"id":"GHSA-hmr5-2xcr-v8pp","summary":"Symfony Vulnerable to stored XSS in WebProfiler CodeExtension::fileExcerpt() — Unescaped Non-PHP File Rendering","details":"### Description\n\nSymfony's profiler, a development only debug UI, renders source-code excerpts on several pages using Twig's custom `file_excerpt` filter. This filter renders PHP files via `highlight_string()` (which escapes HTML), but renders **non-PHP files** by splitting on `\\n` and interpolating each line directly into `\u003ccode\u003e{$line}\u003c/code\u003e` with no escaping. \n\nAn attacker who can write arbitrary bytes into any file under the project root (including e.g. `var/log/dev.log`), achieves **stored XSS** against any developer who later opens that file in the profiler.\n\n### Resolution\n\nThe `file_excerpt` filter now properly escapes each line of non-PHP files using `htmlspecialchars()` before concatenating them.\n\nThe patch for this issue is available [here](https://github.com/symfony/symfony/commit/863aa81c61166f1aa74b7732df316f76113acbdb) for branch 6.4.\n\n### Credits\n\nSymfony would like to thank Claude Mythos Preview (via Project Glasswing) for reporting the issue and providing the fix.","aliases":["CVE-2026-45072"],"modified":"2026-09-10T03:51:06.007105097Z","published":"2026-05-27T21:10:44Z","database_specific":{"severity":"LOW","github_reviewed":true,"github_reviewed_at":"2026-05-27T21:10:44Z","nvd_published_at":null,"cwe_ids":["CWE-79"]},"references":[{"type":"WEB","url":"https://github.com/symfony/symfony/security/advisories/GHSA-hmr5-2xcr-v8pp"},{"type":"WEB","url":"https://github.com/symfony/symfony/commit/863aa81c61166f1aa74b7732df316f76113acbdb"},{"type":"WEB","url":"https://github.com/FriendsOfPHP/security-advisories/blob/master/symfony/symfony/CVE-2026-45072.yaml"},{"type":"WEB","url":"https://github.com/FriendsOfPHP/security-advisories/blob/master/symfony/twig-bridge/CVE-2026-45072.yaml"},{"type":"WEB","url":"https://github.com/FriendsOfPHP/security-advisories/blob/master/symfony/web-profiler-bundle/CVE-2026-45072.yaml"},{"type":"PACKAGE","url":"https://github.com/symfony/symfony"},{"type":"WEB","url":"https://symfony.com/cve-2026-45072"}],"affected":[{"package":{"name":"symfony/symfony","ecosystem":"Packagist","purl":"pkg:composer/symfony/symfony"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"6.4.24"},{"fixed":"6.4.40"}]}],"versions":["v6.4.24","v6.4.25","v6.4.26","v6.4.27","v6.4.28","v6.4.29","v6.4.30","v6.4.31","v6.4.32","v6.4.33","v6.4.34","v6.4.35","v6.4.36","v6.4.37","v6.4.38","v6.4.39"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/05/GHSA-hmr5-2xcr-v8pp/GHSA-hmr5-2xcr-v8pp.json"}},{"package":{"name":"symfony/symfony","ecosystem":"Packagist","purl":"pkg:composer/symfony/symfony"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"7.2.9"},{"fixed":"7.4.12"}]}],"versions":["v7.2.9","v7.3.0","v7.3.0-BETA1","v7.3.0-BETA2","v7.3.0-RC1","v7.3.1","v7.3.10","v7.3.11","v7.3.2","v7.3.3","v7.3.4","v7.3.5","v7.3.6","v7.3.7","v7.3.8","v7.3.9","v7.4.0","v7.4.0-BETA1","v7.4.0-BETA2","v7.4.0-RC1","v7.4.0-RC2","v7.4.0-RC3","v7.4.1","v7.4.10","v7.4.11","v7.4.2","v7.4.3","v7.4.4","v7.4.5","v7.4.6","v7.4.7","v7.4.8","v7.4.9"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/05/GHSA-hmr5-2xcr-v8pp/GHSA-hmr5-2xcr-v8pp.json"}},{"package":{"name":"symfony/symfony","ecosystem":"Packagist","purl":"pkg:composer/symfony/symfony"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"8.0.0"},{"fixed":"8.0.12"}]}],"versions":["v8.0.0","v8.0.1","v8.0.10","v8.0.11","v8.0.2","v8.0.3","v8.0.4","v8.0.5","v8.0.6","v8.0.7","v8.0.8","v8.0.9"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/05/GHSA-hmr5-2xcr-v8pp/GHSA-hmr5-2xcr-v8pp.json"}},{"package":{"name":"symfony/twig-bridge","ecosystem":"Packagist","purl":"pkg:composer/symfony/twig-bridge"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"6.4.24"},{"fixed":"6.4.40"}]}],"versions":["v6.4.24","v6.4.25","v6.4.30","v6.4.31","v6.4.32","v6.4.34","v6.4.35","v6.4.36"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/05/GHSA-hmr5-2xcr-v8pp/GHSA-hmr5-2xcr-v8pp.json"}},{"package":{"name":"symfony/web-profiler-bundle","ecosystem":"Packagist","purl":"pkg:composer/symfony/web-profiler-bundle"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"7.2.9"},{"fixed":"7.4.12"}]}],"versions":["v7.2.9","v7.3.0","v7.3.0-BETA1","v7.3.0-RC1","v7.3.1","v7.3.10","v7.3.2","v7.3.3","v7.3.4","v7.3.5","v7.3.9","v7.4.0","v7.4.0-BETA1","v7.4.0-RC1","v7.4.0-RC3","v7.4.11","v7.4.3","v7.4.4","v7.4.6","v7.4.7","v7.4.8","v7.4.9"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/05/GHSA-hmr5-2xcr-v8pp/GHSA-hmr5-2xcr-v8pp.json"}},{"package":{"name":"symfony/web-profiler-bundle","ecosystem":"Packagist","purl":"pkg:composer/symfony/web-profiler-bundle"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"8.0.0"},{"fixed":"8.0.12"}]}],"versions":["v8.0.0","v8.0.11","v8.0.3","v8.0.4","v8.0.6","v8.0.7","v8.0.8","v8.0.9"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/05/GHSA-hmr5-2xcr-v8pp/GHSA-hmr5-2xcr-v8pp.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V4","score":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N/E:U"}]}