Skip to main content

Grav CMS EUVDEUVD-2026-60592

| CVE-2026-75828 CRITICAL
Cross-site Scripting (XSS) (CWE-79)
9.3
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Recon
    Obtain editor-level Grav account
  2. Delivery
    Craft unquoted attribute with unpaired quote hiding onerror=
  3. Exploit
    Save page, bypassing detectXss() validation
  4. Install
    Payload stored in page content
  5. C2
    Victim renders page in browser
  6. Execute
    Event handler executes in victim session
  7. Impact
    Session hijack or admin takeover

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Execution

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires an authenticated Grav account with page-editing (editor/author) privileges - this is the core limiting factor (PR:L); anonymous internet users cannot exploit it directly. The specific technical prerequisite is crafting an HTML attribute as an unquoted value containing an unpaired quote so that an event handler such as onerror= evades the detectXss() check. Exploitation also needs victim interaction (UI:P): the payload only fires when someone renders the affected page in a browser. It applies to default configurations of Grav prior to 2.0.15 - no unusual feature toggle is needed beyond having the vulnerable version and at least one editor account whose trust you cannot fully guarantee.

Impact

The signals are mostly consistent and point to a genuine high priority within the population that runs Grav. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:P/VC:H/VI:H/SC:H/SI:H) scores 9.3 and reflects a network-reachable, low-complexity attack requiring only a low-privileged authenticated editor account plus passive victim interaction (a visitor viewing the page). The elevating factor is that impact crosses a trust boundary - code chosen by an editor runs in every visitor's session - so an operator running a multi-author Grav site should treat this as urgent even though it is not remote-unauthenticated. The tempering factors are real: exploitation requires an editor-level account (PR:L), so this is primarily an insider or account-compromise vector rather than a mass-scannable internet threat, and there is no public exploit code and no CISA KEV listing, so widespread opportunistic exploitation is not currently evidenced. EPSS was not provided in the input and cannot be cited. Net: credible and worth prompt patching wherever untrusted or numerous editors exist, but the PR:L requirement meaningfully narrows the realistic attacker set compared to a raw 9.3 read.

Exploit ScenarioDerived

An attacker with (or who has phished/compromised) a low-privileged Grav editor account edits a page and inserts an HTML tag whose unquoted attribute value uses an unpaired quote to hide an onerror= handler, which passes detectXss() and is saved. When a normal site visitor or an administrator later views the page, the handler executes in their browser, allowing session-cookie theft, actions performed as the victim, or admin-account takeover. No public proof-of-concept exploit was identified at time of analysis.

Act Now Prioritize within 24-48h. Why: CRITICAL severity + public POC available.
1 public PoC Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Aug 18, 2026

Stored cross-site scripting in Grav CMS before 2.0.15 lets authenticated editors smuggle JavaScript event handlers past the detectXss() sanitizer, which fails to flag event handlers (e.g. onerror=) placed in unquoted HTML attribute values containing unpaired quotes. The malicious payload is persisted in page content and executes in the browser of any visitor who later renders that page. Reported by VulnCheck with a CVSS 4.0 base score of 9.3; no public exploit identified at time of analysis and not listed in CISA KEV.

RemediationAI

Vendor-released patch: upgrade to Grav 2.0.15 or later, which corrects the detectXss() attribute-parsing logic; this is the primary and recommended fix (see advisory GHSA-vfmf-q6x9-cw96 at https://github.com/getgrav/grav/security/advisories/GHSA-vfmf-q6x9-cw96). If immediate patching is not possible, reduce exposure by restricting editor/author accounts to trusted individuals and auditing recently edited pages for injected onerror= or other on* event-handler attributes, since the payload is stored and persists until removed. As a compensating control, deploy a strict Content-Security-Policy that disallows inline script and inline event handlers (e.g. no 'unsafe-inline' for script-src), which blocks execution of injected handlers even if they bypass the sanitizer - with the trade-off that legitimate inline scripts in themes or plugins may break and require refactoring to external files or nonces. Do not rely on input validation alone given the bug is in that validation.

Affected VersionsENISA

grav 0 <2.0.15

Affected Packages

composer getgrav/grav fix: 2.0.15
euvd grav fix: 2.0.15

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in composer, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Grav is a PHP-based flat-file content management system that stores pages as Markdown/HTML on disk rather than in a database. The flaw (CWE-79, Improper Neutralization of Input During Web Page Generation) lives in the detectXss() input-validation routine, which is meant to reject dangerous HTML before content is saved and rendered. The parser assumes attribute values are quote-delimited when scanning for event-handler attributes; an unquoted attribute value that contains an unpaired quote character desynchronizes this logic, so an attribute such as onerror= is not recognized as an event handler and slips through. Because Grav renders the stored, sanitizer-approved content verbatim to visitors, the injected handler fires in their browser context. Affected component per CPE is cpe:2.3:a:getgrav:grav across all versions prior to the fix.

Know when Grav gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (VulnCheck) PRIMARY 9.3 CRITICAL
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:H/VI:H/VA:N/SC:H/SI:H/SA:N
vuln.today AI 8.7 HIGH

Network-reachable stored XSS needing a low-privileged editor account (PR:L) and a victim viewing the page (UI:R); execution in the visitor's browser crosses a trust boundary (S:C) with high confidentiality/integrity impact and no availability effect.

3.1 AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:P/VC:H/VI:H/VA:N/SC:H/SI:H/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
Passive
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
None
Subsequent system: Confidentiality
High
Subsequent system: Integrity
High
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Aug 18, 2026 - 12:02 EUVD
CVE Published
Aug 18, 2026 - 11:19 cve.org
CRITICAL 9.3

DescriptionCVE.org

Grav before 2.0.15 contains a stored cross-site scripting vulnerability in the detectXss() function where unpaired quotes in unquoted attribute values bypass event-handler detection. Authenticated editors can inject event handlers like onerror= that pass validation and execute in visitor browsers when page content is rendered.

Latest POC

1 public PoC link from github

Sign in to open the public PoC links collected for this CVE.

Executive ViewAI

Why It Matters

Grav CMS versions before 2.0.15 contain a stored cross-site scripting vulnerability that allows authenticated editors to inject malicious JavaScript into page content, which then executes for all site visitors. The flaw exploits a weakness in the detectXss() sanitizer that fails to detect event handlers in unquoted HTML attributes. This directly threatens website integrity, visitor security, and can facilitate credential theft, malware distribution, or site defacement.

Business Impact: Severe
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: (1) Restrict editor role assignments to fully trusted personnel only; (2) Implement strict Content Security Policy (CSP) headers to limit script execution scope; (3) Deploy Web Application Firewall rules to detect and block XSS event handler patterns (onerror=, onload=, etc. in attributes); (4) Enable comprehensive audit logging of content modifications; (5) Conduct regular security review of published content for suspicious scripts.

Threat Intelligence Overview

EPSS Score
0.3%
Top 81% exploitable
Prevalence
Low
niche PHP flat-file CMS, modest developer adoption, not enterprise-ubiquitous
Threat Intel
1
1 sources
Data Quality
6 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA GitHub

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC Yes
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity + public POC available
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Out-of-Cycle
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
Very High
Technical Impact
Total

Priority Score

66
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +46
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

More in Grav

View all
CVE-2025-66294 HIGH POC
8.7 Dec 01

Server-side template injection (SSTI) in Grav (getgrav/grav) prior to 1.8.0-beta.27 allows an authenticated attacker hol

CVE-2025-66301 HIGH POC
8.6 Dec 01

Broken access control in Grav CMS (CWE-285) before 1.8.0-beta.27 lets an authenticated editor-level user escalate their

CVE-2025-50286 HIGH POC
8.1 Aug 06

A Remote Code Execution (RCE) vulnerability in Grav CMS v1.7.48 allows an authenticated admin to upload a malicious plug

CVE-2024-34082 CRITICAL POC
9.9 May 15

Grav is a file-based Web platform. Rated critical severity (CVSS 9.9), this vulnerability is remotely exploitable, low a

CVE-2021-47812 CRITICAL POC
9.8 Jan 16

GravCMS 1.10.7 allows unauthenticated remote attackers to write arbitrary YAML configuration files, leading to full serv

CVE-2026-65008 CRITICAL POC
9.3 Jul 21

Remote code execution in Grav CMS 2.0.4 (fixed in 2.0.7) lets an authenticated user holding the admin.pages or api.pages

CVE-2026-75827 CRITICAL POC
9.3 Aug 18

Remote code execution in Grav CMS before 2.0.15 allows attackers holding page-edit or blueprint-config privileges to wri

CVE-2026-75837 CRITICAL POC
9.3 Aug 18

Vertical privilege escalation in Grav CMS before 2.0.14 lets a delegated administrator holding only the admin.users perm

CVE-2025-66844 CRITICAL POC
9.1 Dec 15

Server-side request forgery (SSRF) in Grav CMS versions prior to 1.7.49.5 allows remote authenticated attackers to make

CVE-2025-66299 HIGH POC
8.8 Dec 01

Grav is a file-based Web platform. Prior to 1.8.0-beta.27, Grav CMS is vulnerable to a Server-Side Template Injection (S

CVE-2026-72819 HIGH POC
8.7 Aug 14

Remote code execution in Grav CMS before 2.0.13 allows authenticated low-privilege users to plant and execute arbitrary

CVE-2024-28119 HIGH POC
8.8 Mar 21

Grav is an open-source, flat-file content management system. Rated high severity (CVSS 8.8), this vulnerability is remot

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy