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.
Published: 2026-09-04
Score: 5.1 Medium
EPSS: n/a
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

Grav Admin (plugin grav-plugin-admin2) versions prior to 2.0.21 are vulnerable to a stored cross‑site scripting flaw. The issue arises in the tHtml() function, which injects untrusted usernames into translation templates before parsing them as Markdown. Although Grav’s username validation blocks characters that could harm the filesystem, it allows the characters <, >, ", and '. An attacker can create a user account with an HTML payload in the username field. When an administrator opens certain UI screens—such as the two‑factor force‑disable confirmation prompt or the 'page is locked' editor notice—the payload is processed and executed within the administrator’s authenticated session. The vulnerability allows an attacker to run arbitrary JavaScript in the context of an administrator, potentially stealing session cookies, manipulating data, or defacing the interface.

Affected Systems

All installations of Grav Admin (getgrav/grav-plugin-admin2) running version 2.0.19 or earlier are affected. The vulnerability also applies to any intermediate releases before the official fix in version 2.0.21. Administrators using older Grav core or plugin versions should verify that they are not running a vulnerable release.

Risk and Exploitability

The CVSS score of 5.1 indicates moderate severity. Because the flaw is a stored XSS that only requires the attacker to create a username, the risk is tied to the ability to add new users. Once an attacker succeeds, any administrator who views a UI surface processing the malicious username will be compromised. The EPSS score is not available, and the vulnerability is not listed in the CISA KEV catalog, suggesting that exploitation is not yet widely observed but remains a legitimate risk if the software is kept unchanged.

Generated by OpenCVE AI on September 4, 2026 at 12:23 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade Grav Admin to version 2.0.21 or later, which removes the vulnerable tHtml() processing.
  • If an upgrade is not immediately possible, actively remove or sanitize usernames that contain the characters <, >, ", or ' and replace them with safe placeholders.
  • Limit administrator access to UI surfaces that render usernames through tHtml(); consider disabling or temporarily hiding those interfaces until a patch is applied.
  • Apply additional input validation to username fields, ensuring special characters are escaped or prohibited to prevent injection into templates.

Generated by OpenCVE AI on September 4, 2026 at 12:23 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 04 Sep 2026 11:45:00 +0000

Type Values Removed Values Added
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.
Title Grav Admin before 2.0.21 Stored XSS via username
First Time appeared Getgrav
Getgrav grav
Weaknesses CWE-79
CPEs cpe:2.3:a:getgrav:grav:*:*:*:*:*:*:*:*
Vendors & Products Getgrav
Getgrav grav
References
Metrics cvssV3_1

{'score': 5.4, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N'}

cvssV4_0

{'score': 5.1, 'vector': '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'}


cve-icon MITRE

Status: PUBLISHED

Assigner: VulnCheck

Published:

Updated: 2026-09-04T11:30:02.813Z

Reserved: 2026-09-04T11:00:28.731Z

Link: CVE-2026-85600

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-09-04T12:17:23.630

Modified: 2026-09-04T12:17:23.630

Link: CVE-2026-85600

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-04T12:30:17Z

Weaknesses
  • CWE-79

    Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')