{"id":"CVE-2026-61453","title":"Grav v2.0.0 contains a cross-site scripting vulnerability (fixed in 2.0.1)","summary":"Grav v2.0.0 contains a cross-site scripting vulnerability (fixed in 2.0.1). The XSS blueprint validator (Security::detectXss()) runs on raw page content before Twig processing. When Twig content processing is enabled (twig_content.proces…","severity":"medium","cvss":6.1,"cvssVector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","cwe":["CWE-79","CWE-184","CWE-1336"],"vendor":"getgrav","product":"grav","affected":["grav < 2.0.1"],"patched":["getgrav/grav 2.0.1"],"published":"2026-07-15","updated":"2026-10-08","sourceUpdated":"2026-10-08T16:17:25.220","source":"NVD","sourceUrl":"https://nvd.nist.gov/vuln/detail/CVE-2026-61453","references":[{"url":"https://github.com/getgrav/grav/security/advisories/GHSA-2c4f-86xc-cr74","label":"disclosure@vulncheck.com"},{"url":"https://www.vulncheck.com/advisories/grav-before-xss-via-twig-string-concatenation","label":"disclosure@vulncheck.com"},{"url":"https://github.com/getgrav/grav/security/advisories/GHSA-2c4f-86xc-cr74","label":"134c704f-9b21-4f2e-91b3-4a467353bcc0"},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-61453"},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-61710"},{"url":"https://github.com/advisories/GHSA-2c4f-86xc-cr74"}],"tags":["nvd","cve.org","exploit-available","ghsa","composer"],"exploitAvailable":true,"ssvc":{"exploitation":"poc","automatable":"no","technicalImpact":"partial","timestamp":"2026-07-15T17:58:40.076112Z"},"epss":0.00196,"epssPercentile":0.09175,"aliases":["GHSA-2c4f-86xc-cr74"],"ecosystem":"composer","ingestedAt":"2026-09-16T23:07:58.095Z","slug":"CVE-2026-61453","body":"## Overview\n\nGrav v2.0.0 contains a cross-site scripting vulnerability (fixed in 2.0.1). The XSS blueprint validator (Security::detectXss()) runs on raw page content before Twig processing. When Twig content processing is enabled (twig_content.process_enabled: true), an attacker with page-write API permission can use Twig's string concatenation operator (~) to dynamically construct event handler names, dangerous tag names, or dangerous protocols at render time (e.g. {% set x = \"on\" ~ \"error\" %}). The validator sees only the harmless Twig expression and allows the content, but after Twig rendering the output (rendered via {{ page.content|raw }}) contains an active payload such as <img src=1 onerror=alert(1)>, executing arbitrary JavaScript in visitors' browsers.\n\n## Remediation\n\nRefer to the linked advisories for vendor-supplied fixes and affected version ranges.\n\n## Package advisory (CVE-2026-61453)\n\nAffected packages:\n\n- `getgrav/grav = 2.0.0`\n\nPatched in:\n\n- `getgrav/grav 2.0.1`\n\nSource: https://github.com/advisories/GHSA-2c4f-86xc-cr74","depth":"twilight","depthScore":46,"depthScoreParts":{"impact":33.6,"likelihood":0,"exploitation":12,"ransomware":0},"changes":[{"seq":218130,"id":"CVE-2026-61453","ts":1791478418694,"field":"exploit_available","old":"false","new":"true"},{"seq":218129,"id":"CVE-2026-61453","ts":1791478418694,"field":"cvss","old":null,"new":"6.1"}]}