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-55779

CVE-2026-55779: Stored Cross-Site Scripting (XSS) in Silverstripe Archive Admin Restore

Amit Schendel
Amit Schendel
Senior Security Researcher

Aug 29, 2026·6 min read·0 visits

Executive Summary (TL;DR)

Unescaped user input in the RestoreAction helper leads to stored XSS inside the Silverstripe CMS administrative interface during page restoration actions.

A Stored Cross-Site Scripting (XSS) vulnerability exists in the silverstripe/versioned package prior to version 3.2.1. When an administrator restores an archived page containing a crafted Title or URLSegment, the generated restoration message is rendered as CAST_HTML without proper sanitization. This allows malicious JavaScript to execute in the administrator's browser session, compromising the confidentiality and integrity of the CMS dashboard.

Vulnerability Overview

The affected component is the RestoreAction helper within the silverstripe/versioned module, which manages the lifecycle, tracking, and restoration of versioned models in Silverstripe CMS applications. When an administrator accesses the ArchiveAdmin console and restores a previously archived object, the module constructs an execution status message. This message incorporates the restored object's metadata, such as its Title, URLSegment, and CMSEditLink.

Because the system treats system messages as validated HTML under the CAST_HTML formatting configuration, it does not perform automatic output sanitization on the rendered output. This behavior exposes a stored cross-site scripting (XSS) attack surface. Specifically, any malicious input stored in the draft or published attributes of a versioned page will bypass standard framework output filters and execute in the target's browser.

The vulnerability is tracked under CVE-2026-55779. It represents a classic improper neutralization of input during web page generation (CWE-79). The security impact is determined by the permissions of the user restoring the content. Since page restoration is restricted to administrative roles, the vulnerability targets high-privilege sessions within the CMS control panel.

Root Cause Analysis

The root cause of CVE-2026-55779 is the lack of output encoding within the getRestoreMessage method located in src/RestoreAction.php. The Silverstripe framework relies on casting rules to distinguish between plain text and rich HTML. When generating notification payloads, the framework treats the output as trusted HTML, assigning it a casting type equivalent to CAST_HTML.

In the vulnerable implementation, the getRestoreMessage method directly interpolates the title of the restored object ($restoredItem->Title) and its corresponding CMS edit URL into the notification string. This interpolation is executed via sprintf and string concatenation. Because these values originate from user-controlled fields and are stored within the database without restrictive input filtering, they serve as persistent vectors for injection payloads.

When the database stores malicious markup and subsequently retrieves it for display in the ArchiveAdmin, the lack of sanitization allows the markup to be rendered directly into the administrative UI. This bypasses the browser's same-origin boundary protections, allowing the executed script to make requests on behalf of the authenticated administrator.

Code Analysis

The vulnerable logic resides in src/RestoreAction.php inside the getRestoreMessage function. In unpatched releases, the raw property values were assigned and used without any defensive filtering.

// Vulnerable Code Path
public static function getRestoreMessage($originalItem, $restoredItem, $changedLocation = false)
{
    // Raw Title is assigned directly without escaping
    $restoredID = $restoredItem->Title ?: $restoredItem->ID;
    $restoredType = Convert::raw2xml(strtolower($restoredItem->i18n_singular_name() ?? ''));
 
    $editLink = $restoredItem->CMSEditLink();
    if ($editLink) {
        // Unescaped restoredID and editLink are concatenated into an HTML anchor tag
        $restoredID = sprintf('<a href="%s">%s</a>', $editLink, $restoredID);
    }
    // ...
}

The fixing patch introduces Convert::raw2xml calls to properly escape all dynamic parameters. This utility is the standard Silverstripe mechanism for converting unsafe characters into XML entities.

// Patched Code Path
public static function getRestoreMessage($originalItem, $restoredItem, $changedLocation = false)
{
    // Escape the Title or ID property to prevent tag injection
    $restoredID = Convert::raw2xml($restoredItem->Title ?: $restoredItem->ID);
    $restoredType = Convert::raw2xml(strtolower($restoredItem->i18n_singular_name() ?? ''));
 
    $editLink = $restoredItem->CMSEditLink();
    if ($editLink) {
        // Escape both the target URL and the inner anchor text
        $restoredID = sprintf('<a href="%s">%s</a>', Convert::raw2xml($editLink), $restoredID);
    }
    // ...
}

Additionally, the patch applies Convert::raw2xml to the values generated during difference analysis. When the original Title or URLSegment differs from the restored state, the system records the new values. These must be escaped because they are subsequently rendered to describe the property modifications.

Exploitation

An attacker can exploit this vulnerability using multiple vectors depending on the configured fields. The primary vector involves the Title attribute of a page. The attacker injects an iframe payload containing a nested script tag: <iframe srcdoc="&lt;script&gt;alert('xss')&lt;/script&gt;"></iframe>. Once this page is archived, the payload resides in the historical versions tables.

The second vector exploits the change-tracking output when a page property is altered. By crafting a payload using the formaction attribute on a button, such as <button formaction="javascript:alert(1)">Click</button>, the attacker targets the administrator's UI interaction. If the restored page's Name differs from the original, this dynamic block is evaluated and rendered in the success message.

Both attack vectors require the victim to perform a page restoration action. While this introduces a dependency on user interaction, administrative actions of this type are routine during content maintenance cycles, making social engineering or passive waiting highly viable strategies.

Impact Assessment

The security impact of CVE-2026-55779 is rated as Medium, with a CVSS v3.1 base score of 5.4. Although the impact is localized to the client session, the administrative nature of the targeted workspace elevates the operational consequences. The injected script executes under the origin and session credentials of the active administrator.

The attacker can read, modify, or exfiltrate sensitive data, including CSRF tokens, session identifiers, and CMS settings. Because Silverstripe administrators have full write access to the underlying application database via the site tree and settings panels, the session context can be used to perform authorized actions. This includes the creation of backdoored administrator accounts, modifying site configurations, or injecting malicious scripts into public pages.

While the scope is classified as Unchanged because the execution is confined to the client browser, the administrative privileges of the compromised user effectively grant the attacker complete logical control over the CMS content. No active exploitation has been registered in the wild, but the existence of explicit regression tests in the codebase demonstrates a straightforward exploitation path.

Remediation & Mitigation

The primary remediation for this vulnerability is upgrading the silverstripe/versioned package to version 3.2.1 or newer. This update ensures that all parameters processed by RestoreAction::getRestoreMessage are securely escaped prior to HTML assembly.

composer update silverstripe/versioned

If immediate package upgrade is not feasible, organizations can manually apply the hotfix by modifying src/RestoreAction.php. The modification requires wrapping all dynamic user-controlled strings, including $restoredItem->Title, $restoredItem->URLSegment, and $editLink, inside calls to the Convert::raw2xml helper.

To detect potential exploitation attempts or pre-existing payloads, security teams should execute database queries across historical version tables. The query targets instances of common HTML tags and attributes inside the Title and URLSegment columns:

SELECT ID, Title, URLSegment FROM "SiteTree_Versions" 
WHERE Title LIKE '%<script%' OR Title LIKE '%<iframe%' OR Title LIKE '%formaction%';

Fix Analysis (2)

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

Affected Systems

Silverstripe CMSSilverstripe Versioned Module

Affected Versions Detail

Product
Affected Versions
Fixed Version
silverstripe/versioned
Silverstripe
< 3.2.13.2.1
AttributeDetail
CWE IDCWE-79
Attack VectorNetwork (AV:N)
CVSS Score5.4 (Medium)
EPSS ScoreNot Available
ImpactStored Cross-Site Scripting / Session Hijacking
Exploit StatusPoC Available
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1189Drive-by Compromise
Initial Access
T1185Browser Session Hijacking
Collection
CWE-79
Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

The application fails to neutralize or escape user-controlled inputs before placing them into dynamic HTML messages rendering to administrators.

Known Exploits & Detection

GitHub AdvisoryStored XSS PoC details via title-based and button-based vectors

Vulnerability Timeline

Security patch authored
2026-06-15
Pull request #541 merged
2026-06-24
Vulnerability published and patch released in version 3.2.1
2026-08-28

References & Sources

  • [1]GitHub Security Advisory
  • [2]Pull Request #541
  • [3]Fix Commit
  • [4]Test Commit
  • [5]Release 3.2.1
  • [6]Silverstripe Security Release

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

•about 2 hours ago•CVE-2026-55784
7.5

CVE-2026-55784: Concurrent Request Context Overwrite in free5GC AUSF

A concurrency synchronization flaw (race condition) exists in the Authentication Server Function (AUSF) of the free5GC 5G core network implementation. In versions 1.4.4 and earlier, authentication contexts are stored in a global sync.Map keyed solely by the Subscriber Permanent Identifier (SUPI). If multiple concurrent authentication requests are received for the same SUPI, the active security parameters (such as keys and expected responses) are unconditionally overwritten, resulting in authentication failures for the legitimate user.

Alon Barad
Alon Barad
2 views•6 min read
•about 3 hours ago•CVE-2026-55785
3.7

CVE-2026-55785: Non-Constant-Time Cryptographic Comparison and Sensitive Information Leakage in free5GC AUSF

free5GC is an open-source implementation of the 5G core network. Prior to version 1.4.5, the Authentication Server Function (AUSF) component of free5GC performs cryptographic comparisons within its Service-Based Interface (SBI) handling logic using non-constant-time helpers. These comparison utilities return immediately upon encountering a mismatching character, creating a covert timing channel. Concurrently, the AUSF writes the expected validation vector to standard output logs at the INFO level, exposing sensitive cryptographic material to unauthorized processes or logging agents.

Amit Schendel
Amit Schendel
3 views•5 min read
•about 4 hours ago•CVE-2026-55848
8.6

CVE-2026-55848: GML Layer XML External Entity (XXE) Injection in MapFish Print

An XML External Entity (XXE) vulnerability in MapFish Print allows unauthenticated remote attackers to perform arbitrary local file disclosure and Server-Side Request Forgery (SSRF) by exploiting GML layer URL parameters in requests submitted to the /api/print3/print endpoint.

Amit Schendel
Amit Schendel
2 views•7 min read
•about 4 hours ago•CVE-2026-55843
7.0

CVE-2026-55843: Privilege Demotion and Access Control Bypass via Parameter Omission in Snipe-IT

A comprehensive technical analysis of CVE-2026-55843, an Improper Privilege Management vulnerability (CWE-269) in Snipe-IT versions prior to 8.6.0. The vulnerability allows an authenticated editor or administrator to overwrite and strip the granular or administrative permissions of other users by omitting the permission parameter from profile update payloads. This issue has been resolved in Snipe-IT version 8.6.0.

Amit Schendel
Amit Schendel
3 views•7 min read
•about 5 hours ago•CVE-2026-55856
5.9

CVE-2026-55856: Credential Disclosure via Out-of-Order Handshake in MariaDB Connector/J

A critical credential disclosure vulnerability in MariaDB Connector/J allows remote attackers to capture raw database passwords. The driver transmits plaintext passwords prior to verifying TLS certificate fingerprints when configured in ephemeral trust fallback states.

Amit Schendel
Amit Schendel
4 views•5 min read
•about 6 hours ago•CVE-2026-55857
5.9

CVE-2026-55857: Insecure Credential Transmission via PAM Dialog Plugin in MariaDB Connector/J

A transport-security omission in the MariaDB Connector/J driver allows remote on-path adversaries or rogue database servers to capture database credentials in cleartext. Under default configurations (sslMode=DISABLE), the driver fails to enforce encrypted channels when negotiating the Pluggable Authentication Module (PAM) 'dialog' plugin, resulting in cleartext transmission of sensitive passwords.

Amit Schendel
Amit Schendel
5 views•6 min read