CVE-2020-36955 Overview
CVE-2020-36955 is a persistent cross-site scripting (XSS) vulnerability affecting Grav CMS version 1.6.30 with Admin Plugin version 1.9.18. This vulnerability allows authenticated attackers to inject malicious scripts through the page title field. When an attacker creates a new page with a malicious script embedded in the title, the script will be executed when the page is viewed in the admin panel or on the public-facing site.
Critical Impact
Authenticated attackers can execute arbitrary JavaScript in the browsers of other users viewing the affected pages, potentially leading to session hijacking, credential theft, or further compromise of the CMS environment.
Affected Products
- Grav CMS 1.6.30
- Grav Admin Plugin 1.9.18
Discovery Timeline
- 2026-01-26 - CVE CVE-2020-36955 published to NVD
- 2026-01-27 - Last updated in NVD database
Technical Details for CVE-2020-36955
Vulnerability Analysis
This persistent cross-site scripting vulnerability exists due to improper input sanitization in the Grav CMS Admin Plugin. The page title field does not adequately filter or encode user-supplied input before rendering it in HTML contexts. This allows an authenticated user with page creation privileges to store malicious JavaScript that will be executed in the browser context of any user who views the affected page.
The attack is classified as stored XSS (CWE-79), meaning the malicious payload persists in the application's database and is served to victims without requiring any additional attacker interaction. This makes the vulnerability particularly dangerous as it can affect multiple users over time.
Root Cause
The root cause of this vulnerability is insufficient input validation and output encoding in the page title handling functionality of the Grav Admin Plugin. When a page title is submitted, the application fails to properly sanitize HTML and JavaScript content before storing it in the database. Subsequently, when the page title is rendered in the admin panel or on the site, the malicious script is included without proper encoding, causing it to execute in the victim's browser.
Attack Vector
The attack exploits the network-accessible Admin Plugin interface and requires an authenticated attacker with permissions to create or edit pages. The attacker crafts a page title containing malicious JavaScript code. When administrators or other users access the affected page through the admin panel or when visitors view the page on the public site, the embedded script executes within their browser session.
The exploitation flow involves creating a new page through the admin interface, injecting JavaScript payload in the title field, and waiting for victims to view the page. The script then executes with the privileges of the viewing user's session.
Detection Methods for CVE-2020-36955
Indicators of Compromise
- Unexpected JavaScript code or HTML tags present in page titles within the Grav CMS database
- Unusual page titles containing <script> tags, event handlers like onerror, onload, or encoded JavaScript payloads
- Web server logs showing page creation requests with suspicious title parameters containing encoded or unencoded script content
- Reports from users experiencing unexpected browser behavior or redirects when viewing pages
Detection Strategies
- Implement Web Application Firewall (WAF) rules to detect and block XSS patterns in HTTP request parameters, particularly targeting the page title field
- Deploy Content Security Policy (CSP) headers to prevent inline script execution and report violations
- Conduct regular security audits of page content stored in the Grav CMS database to identify injected scripts
- Monitor application logs for page creation or modification events with suspicious content patterns
Monitoring Recommendations
- Enable verbose logging for the Grav Admin Plugin to capture all page creation and modification events
- Set up alerts for CSP violation reports that may indicate attempted or successful XSS exploitation
- Implement database integrity monitoring to detect unauthorized modifications to page content
- Review audit logs for accounts creating pages with unusual or encoded content in title fields
How to Mitigate CVE-2020-36955
Immediate Actions Required
- Upgrade Grav CMS and the Admin Plugin to the latest available versions that include XSS fixes
- Review all existing page titles in the CMS for potentially malicious content and sanitize as needed
- Implement Content Security Policy headers to mitigate the impact of any XSS vulnerabilities
- Restrict page creation privileges to trusted administrators only
Patch Information
Users should update to the latest versions of Grav CMS and the Admin Plugin. For detailed patch information and the latest releases, refer to the GetGrav Official Site. Additional technical details about this vulnerability can be found in the VulnCheck Advisory on Grav CMS and the Exploit-DB #49264 entry.
Workarounds
- Implement server-side input validation to strip or encode HTML and JavaScript from page titles before storage
- Deploy a Web Application Firewall with XSS protection rules to filter malicious input
- Add Content Security Policy headers with strict directives to prevent inline script execution
- Limit page creation and editing permissions to only trusted administrative users
- Regularly audit page content for suspicious scripts and remove any identified malicious payloads
# Example Content Security Policy header configuration for Apache
# Add to .htaccess or httpd.conf
Header set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; frame-ancestors 'self';"
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

