CVE-2026-85600
Received Received - Intake

Stored XSS in Grav Admin Plugin

Vulnerability report for CVE-2026-85600, including description, CVSS score, EPSS score, affected products, exploitability, helpful resources, and attack-flow context.

Publication date: 2026-09-04

Last updated on: 2026-09-04

Assigner: VulnCheck

Description

Grav Admin (getgrav/grav-plugin-admin2) versions <= 2.0.19 contain a stored cross-site scripting vulnerability in the tHtml() function (src/lib/stores/i18n.svelte.ts), which substitutes untrusted parameters such as usernames into translation templates before parsing the result as markdown. Grav's server-side username validation (DataUser::isValidUsername) blocks filesystem-dangerous characters but not <, >, ", or ', allowing an attacker to register a username containing an HTML payload. When an administrator views a UI surface that renders the username through tHtml()β€”such as the two-factor force-disable confirmation prompt or the 'page is locked' editor noticeβ€”the payload executes in their authenticated session. Fixed in 2.0.21.

CVSS Scores

EPSS Scores

Probability:
Percentile:

Meta Information

Published
2026-09-04
Last Modified
2026-09-04
Generated
2026-09-04
AI Q&A
2026-09-04
EPSS Evaluated
N/A
NVD
EUVD

Affected Vendors & Products

Showing 2 associated CPEs
Vendor Product Version / Range
getgrav grav-plugin-admin2 to 2.0.19 (inc)
getgrav grav-plugin-admin2 2.0.21

Helpful Resources

Exploitability

CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-79 The product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.

Attack-Flow Graph

AI Quick Actions

Instant insights powered by AI
Executive Summary

This is a stored cross-site scripting (XSS) vulnerability in Grav Admin versions before 2.0.21. It occurs in the tHtml() function where untrusted parameters like usernames are inserted into translation templates before being parsed as markdown. The server-side username validation fails to block HTML metacharacters such as <, >, ", or ', allowing attackers to register malicious usernames with HTML payloads. When administrators view affected UI surfaces, the payload executes in their authenticated session.

Detection Guidance

To detect this vulnerability, check if Grav Admin versions are below 2.0.21. Inspect the file src/lib/stores/i18n.svelte.ts for the tHtml() function usage. Look for usernames containing HTML payloads like <img src=x onerror=alert(1)> in admin interfaces.

Impact Analysis

An attacker could execute arbitrary JavaScript in an administrator's session, leading to account takeover or further exploitation. The impact includes potential unauthorized access to sensitive data, manipulation of admin interfaces, or installation of additional malicious code. The vulnerability is exploitable by low-privileged users if self-registration is enabled, making it accessible even to unauthenticated attackers.

Compliance Impact

This vulnerability could lead to unauthorized access to personal or sensitive data, violating GDPR's data protection principles and HIPAA's security requirements. It may result in data breaches, unauthorized modifications, or disclosure of protected health information, potentially leading to legal penalties and reputational damage.

Mitigation Strategies

Immediately update Grav Admin to version 2.0.21 or later. If updating is not possible, restrict username input to block HTML metacharacters like <, >, ", and '. Disable self-registration if enabled to prevent unauthenticated exploitation.

Chat Assistant

Ask questions about this CVE
Hi! I’m here to help you understand CVE-2026-85600. Ask me anything about the vulnerability, its impact, or mitigation strategies.
0/70

EPSS Chart