CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-54720

CVE-2026-54720: Stored Cross-Site Scripting (XSS) via Sandbox Bypass in Silverstripe Framework

Amit Schendel
Amit Schendel
Senior Security Researcher

Aug 28, 2026·6 min read·24 visits

Executive Summary (TL;DR)

A design shortcut in Silverstripe Framework's iframe sandboxing allows attackers to bypass security filters using simple single-tag iframe embeds, enabling unauthenticated or lower-privileged administrative session takeover.

CVE-2026-54720 is a stored Cross-Site Scripting (XSS) vulnerability inside the Silverstripe Framework's media shortcode processor. Due to a flawed performance optimization, HTML inputs containing two or fewer opening angle brackets bypassed security sandboxing. This flaw allows authenticated or lower-privileged users to inject administrative panel payloads that execute arbitrary client-side JavaScript when viewed by system administrators.

Vulnerability Overview and Context

The Silverstripe Framework incorporates a rich-text editing system within its content management panel that supports embedding third-party media. This capability is managed via shortcodes parsed on the server side before rendering. The core mechanism is implemented in the EmbedShortcodeProvider class under src/View/Shortcodes/. To mitigate the risks of executing arbitrary third-party code in the hosting domain, the framework routes content through a sandboxing system.

Historically, this sandboxing system, executed via sandboxHtml(), forced potentially risky HTML embeds into isolated, sandboxed subdocuments or sandboxed iframes. However, the parser logic contained a shortcut design flaw. It assumed that basic or brief HTML segments, particularly those with small numbers of opening tags, were structurally simple enough to render directly in the parent context without risk.

This design shortcut introduced a stored Cross-Site Scripting (XSS) vulnerability classified as CWE-79. Under specific conditions, an editor or a lower-privileged user capable of injecting media shortcodes could execute arbitrary JavaScript inside the parent document context. This execution occurs when an administrative user views the page within the CMS back-end administration panel, exposing the administrator's active session to compromise.

Root Cause Analysis: Flawed Bracket Optimization

The core vulnerability lies within the static optimization shortcut implemented in the sandboxHtml() method of EmbedShortcodeProvider.php. To optimize performance and reduce DOM nesting, the framework checked the frequency of the opening angle bracket (<) in the input HTML string. If the count of < characters was two or fewer, the code bypassed the sandboxing flow and returned the HTML string directly.

This check relied on the assumption that an HTML string containing two or fewer < characters could only represent a single tag paired with its closing tag, or two standalone safe tags. The developer assumed that a single, unsandboxed <iframe> tag was harmless because the parent context remained isolated from the inner contents. This logic overlooked the fact that the browser still processes the attributes of the container <iframe> element itself in the context of the parent document.

Because the raw iframe element is rendered inside the host page, any attribute attached to this iframe is interpreted directly by the user's browser. An attacker can append arbitrary HTML event handlers, such as onload, or inject execution protocols like javascript: or data: inside the src attribute. When the browser tokenizes the page, it executes the payload in the context of the CMS administrative panel rather than an isolated origin.

Code-Level Analysis and Patch Verification

To understand the structural failure, we analyze the vulnerable logic in EmbedShortcodeProvider.php before the remediation. The system evaluated the embed input as follows:

// Vulnerable code block in version < 6.2.2
private static function sandboxHtml(string $html, array $arguments)
{
    // ...
    // If there's more than 2 HTML tags then sandbox it
    if (substr_count($html, '<') <= 2) {
        return $html;
    }
    // ...
}

If the validation succeeded, the string $html returned unmodified. To address this, the patch introduced in version 6.2.2 routes the optimization path through a sanitization function designed to strip unsafe attributes before returning the raw HTML.

// Patched logic in version 6.2.2
if (substr_count($html, '<') <= 2) {
    // Returned as-is into the main document, so strip unsafe attributes first
    return EmbedShortcodeProvider::removeDangerousAttributes($html);
}

This modified pathway executes removeDangerousAttributes(), which parses the iframe and retains only an explicit allowlist of layout and media attributes. The allowlist includes src, width, height, frameborder, allow, allowfullscreen, webkitallowfullscreen, mozallowfullscreen, referrerpolicy, loading, scrolling, allowtransparency, and title. It specifically strips critical layout attributes like style, script blocks like srcdoc, and event triggers like onload.

Furthermore, the helper normalizes potential obfuscation by calling html_entity_decode() and stripping non-printing control characters ([\x00-\x20]+) prior to resolving the URI scheme. This prevents attackers from bypassing simple string-matching rules with hidden white spaces or HTML character references.

Exploitation and Attack Vectors

Exploitation requires an attacker to inject a crafted media shortcode containing two or fewer opening angle brackets. This payload is stored in the database and triggers when an administrator views the content. There are multiple methods to execute code under these parser constraints.

First, an attacker can use a standard inline event handler. Since the iframe is parsed in the main DOM, the onload event fires automatically when the iframe element is rendered:

<iframe onload="alert(document.cookie)" src="about:blank"></iframe>

Second, browsers allow spaces and alternative token separators such as the forward slash. An attacker can construct a payload that evades naive white-space parsers by using slash separators:

<iframe/onload="alert(document.cookie)" src="about:blank"></iframe>

Third, execution can be forced via the src attribute. Setting the source to a pseudo-protocol like javascript: executes script inside the active origin when loaded by the DOM:

<iframe src="javascript:alert(document.cookie)"></iframe>

To bypass simple signature checks, attackers can obfuscate the scheme using tab separators or HTML entities which the browser normalizes before execution:

<iframe src="java&#9;script:alert(document.cookie)"></iframe>

Impact Assessment and Administrative Takeover

The practical impact of this vulnerability is significant, as represented by its CVSS 3.1 score of 5.4. While the vulnerability requires user interaction to trigger, the execution occurs within the context of an authenticated Silverstripe CMS administrator. This session exposure permits the attacker to hijack administrative control.

An attacker executing arbitrary JavaScript in the CMS admin panel can perform any action available to the victim. This includes creating new administrative user accounts, modifying existing content, altering site configuration settings, and exfiltrating sensitive data stored within the CMS.

Because the administrative panel often lacks strict anti-CSRF protections for all actions executed via API endpoints in the background, a silent background script can modify templates or download system backups. Furthermore, if administrative session cookies do not carry the HttpOnly flag, the attacker can exfiltrate active session tokens directly to an external server.

Remediation and Defense-in-Depth

The primary remediation path is upgrading the silverstripe/framework dependency to version 6.2.2 or higher. This update introduces the sanitization logic that strips dangerous attributes and normalizes nested protocol URIs. Organizations can perform the upgrade via Composer:

composer update silverstripe/framework

If immediate patching is not feasible, organizations can implement virtual patching on Web Application Firewalls (WAF) to detect and block malicious shortcodes. The WAF should scan POST requests targeting content creation endpoints for suspicious iframe structures inside shortcodes. A suitable regex-based signature is:

<iframe(?:"[^"]*"|'[^']*'|[^>])*(?:onload|onmouseover|srcdoc|style)\s*=

Additionally, implementing a strict Content Security Policy (CSP) can limit the impact of client-side execution. A robust CSP that restricts script execution (script-src 'self') and disallows inline scripts prevents event handlers on unsanitized elements from running, thereby neutralizing the vulnerability even if the parser bypass succeeds.

Official Patches

Silverstripe Ltd.Remediation commit in core framework repository
Silverstripe Ltd.Associated pull request for CVE-2026-54720 fix

Fix Analysis (1)

Technical Appendix

CVSS Score
5.4/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:N
EPSS Probability
0.26%
Top 82% most exploited

Affected Systems

Silverstripe Content Management System (CMS) deployments utilising the silverstripe/framework composer package.

Affected Versions Detail

Product
Affected Versions
Fixed Version
silverstripe-framework
Silverstripe Ltd.
< 6.2.26.2.2
AttributeDetail
CWE IDCWE-79
Attack VectorNetwork (AV:N)
CVSS v3.1 Score5.4
EPSS Score0.00263 (Percentile: 17.73%)
ImpactStored XSS leading to Administrative Session Compromise
Exploit StatusProof of Concept (PoC) documented
KEV StatusNot listed in CISA KEV Catalog

MITRE ATT&CK Mapping

T1189Drive-by Compromise
Initial Access
T1185Browser Session Hijacking
Collection
CWE-79
Cross-site Scripting

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

Vulnerability Timeline

Vulnerability officially patched in version 6.2.2
2026-07-01
Advisory GHSA-gvrw-qqp5-jgc5 published
2026-07-01

References & Sources

  • [1]GitHub Security Advisory GHSA-gvrw-qqp5-jgc5
  • [2]Silverstripe Official Security Advisory
  • [3]Official Patch Commit
  • [4]Official GitHub Pull Request
  • [5]Silverstripe Framework 6.2.2 Release Tag
  • [6]CVE-2026-54720 Record on CVE.org
  • [7]NVD Vulnerability Database Entry
  • [8]CVE V5 Record Repository

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•2 minutes ago•CVE-2026-109619
9.2

CVE-2026-109619: Remote Code Execution in PHP Core via Stale Global State Memory Corruption (PHP2Shell)

CVE-2026-109619 (PHP2Shell) is a critical Use-After-Free vulnerability in the core PHP engine caused by improper global state cleanup during out-of-memory exception handling across persistent worker requests.

Alon Barad
Alon Barad
1 views•6 min read
•5 minutes ago•CVE-2026-113721
4.5

CVE-2026-113721: Unsafe Link Resolution in virtualenv File Generation

In Python virtualenv prior to version 21.14.9, activation script generators and configuration writers use Path.exists() before writing files. Because Path.exists() resolves symbolic links, it returns False for dangling symlinks. Consequently, virtualenv skips unlinking pre-planted symbolic links or hard links, writing data directly to target locations outside the intended virtual environment directory.

Amit Schendel
Amit Schendel
1 views•5 min read
•9 days ago•CVE-2026-87697
8.8

CVE-2026-87697: Untrusted Deserialization in .NET PresentationCore Clipboard Handling

A remote code execution vulnerability exists in Microsoft .NET due to untrusted data deserialization within the PresentationCore component. The flaw stems from implicit auto-conversion flags during clipboard data retrieval operations.

Alon Barad
Alon Barad
31 views•5 min read
•9 days ago•CVE-2026-70007
8.8

CVE-2026-70007: Out-of-Bounds Write Vulnerability in .NET Framework and WPF Subsystem

An out-of-bounds write vulnerability in Microsoft .NET Framework, .NET runtime, and Visual Studio allows unauthenticated remote attackers to execute arbitrary code via crafted pixel-shader bytecode or auto-converted clipboard payloads.

Amit Schendel
Amit Schendel
19 views•6 min read
•10 days ago•CVE-2026-70186
7.5

CVE-2026-70186: ASP.NET Core Denial of Service Vulnerability via Framework Deadlock

ASP.NET Core contains a thread deadlock vulnerability (CWE-833) that allows an unauthenticated remote attacker to cause a denial of service over the network by exhausting server thread pool resources.

Amit Schendel
Amit Schendel
18 views•5 min read
•10 days ago•CVE-2026-70035
8.8

CVE-2026-70035: Insecure Deserialization Remote Code Execution in Microsoft .NET Framework and .NET Runtime

CVE-2026-70035 is a high-severity Remote Code Execution (RCE) vulnerability in Microsoft .NET Framework, .NET runtime, and Visual Studio caused by improper handling during the deserialization of untrusted data (CWE-502). An unauthenticated attacker can execute arbitrary code within the context of the affected process by delivering a crafted serialized payload.

Amit Schendel
Amit Schendel
24 views•6 min read