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



GHSA-7MPF-4465-7FC2

GHSA-7mpf-4465-7fc2: Stored Cross-Site Scripting in Winter CMS Backend List Widget

Amit Schendel
Amit Schendel
Senior Security Researcher

Aug 21, 2026·5 min read·1 visit

Executive Summary (TL;DR)

Unescaped HTML attribute interpolation in Winter CMS Backend List image columns allows stored XSS via crafted image URLs.

A Stored Cross-Site Scripting (XSS) vulnerability exists in the Backend List widget of Winter CMS (winter/wn-backend-module). When a list column is configured with the 'image' type and displays attacker-controlled input, the lack of sanitization in the image URL allows injection of arbitrary HTML attributes, potentially executing malicious scripts in the session of administrators viewing the list.

Vulnerability Overview

The vulnerability designated as GHSA-7mpf-4465-7fc2 describes a Stored Cross-Site Scripting (XSS) flaw in the backend modules of Winter CMS, specifically affecting the winter/wn-backend-module package.

This vulnerability is rooted in the List widget (Backend\Widgets\Lists), which is responsible for rendering administrative records in a tabular format. The system allows developers to specify various column types, including text, number, and image.

While the core installation of Winter CMS does not configure any list columns to use the image type by default, third-party plugins and custom modules frequently employ this feature. When a list column is configured as an image type, it renders dynamic database content into the final HTML output. If this content is influenced by a malicious actor, it introduces an input vector for client-side injection attacks.

Root Cause Analysis

The technical origin of the flaw lies in how the evalImageTypeValue method within the Backend\Widgets\Lists class interpolates URL strings.

The application constructs the source HTML element by concatenating the image URL directly into single quotes within the src attribute. This variable interpolation is executed without any escaping context, making it vulnerable to attribute breakout.

The vulnerability is compounded by the behavior of ImageResizer::filterGetUrl(). When this helper function receives an external or unresolvable URL string, it returns the input value verbatim as a fallback. Consequently, any string submitted by an attacker is passed directly to the HTML template generation routine.

Furthermore, developers frequently assume standard URL validation is sufficient to prevent payload injection. However, standard validation routines like PHP's native FILTER_VALIDATE_URL do not strip quotes or forward slashes. An attacker can construct a payload that satisfies standard URL formatting constraints while retaining the syntax required to break out of single quotes when parsed by modern web browsers.

Code Analysis & Patch Deep Dive

To understand the exact mechanics, we must examine the difference between the vulnerable code path and the implemented security patch in the file modules/backend/widgets/Lists.php.

Prior to the patch, the evalImageTypeValue function executed string interpolation directly without context-aware encoding:

if ($image) {
    $imageUrl = ImageResizer::filterGetUrl($image, $width, $height, $options);
    return "<img src='$imageUrl' width='$width' height='$height' />";
}

Because the $imageUrl value is wrapped in single quotes, an attacker who injects a single quote followed by an event handler can rewrite the DOM element's structure. The patch introduced by the Winter CMS core team addresses this by using the e() helper function, which translates to htmlspecialchars with ENT_QUOTES configured:

if ($image) {
    // filterGetUrl() returns the value it was given when the image cannot be
    // resolved, so the result may still be the record's raw value.
    $imageUrl = ImageResizer::filterGetUrl($image, $width, $height, $options);
 
    return sprintf(
        "<img src='%s' width='%s' height='%s' />",
        e($imageUrl),
        e($width),
        e($height)
    );
}

This remediation ensures that single quotes, double quotes, and other special HTML characters are systematically converted to their corresponding safe HTML entities. Consequently, any injected quotes are rendered as plain text within the attribute boundary rather than being interpreted by the browser parser as an attribute delimiter.

Attack Methodology & Exploit Mechanics

An attacker seeking to exploit this vulnerability must identify a model field mapped to an image list column that accepts external input.

A typical proof-of-concept payload targets the src attribute boundary using single quotes and the forward slash character:

http://example.com/a.jpg'/onerror='window.pwned=1

When processed by the unpatched system, this payload results in the following malformed HTML element being generated:

<img src='http://example.com/a.jpg'/onerror='window.pwned=1' width='100' height='100' />

During DOM parsing, the browser encounters the single quote after a.jpg, which terminates the src attribute. The forward slash acts as a structural separator, and the browser registers onerror as a new event handler attribute. Because the image URL points to a non-existent asset, the browser fires the error event, immediately executing the JavaScript payload within the security context of the active user session.

Impact Assessment

The overall impact of this stored XSS vulnerability is governed by the access level of the administrative users viewing the affected list view.

While the CVSS 3.1 base score is 2.0 (Low), the concrete consequences in a production environment can be significant if an administrator session is hijacked. Since the payload executes within the backend administrator interface, an attacker could potentially perform administrative operations, alter configuration settings, or exfiltrate sensitive backend data.

The vector requirements demand high privileges (PR:H) to write the malicious payload into the database, or an application structure that exposes writing capabilities to low-privilege or unauthenticated users. The attack complexity is high (AC:H) because it requires specific backend plugin configurations that are not present in a default out-of-the-box installation of Winter CMS.

Due to these constraints, the vulnerability has not been observed in active exploitation campaigns, and no weaponized public exploits are known to exist.

Remediation & Defensive Strategies

The recommended action to eliminate this vulnerability is upgrading the winter/wn-backend-module package to version 1.2.14 or later.

For systems where an immediate upgrade is not possible, security administrators can manually patch the file modules/backend/widgets/Lists.php using the e() helper as demonstrated in the patch analysis section. This mitigation must be applied across all active environments to prevent exploitation attempts.

Additionally, input validation routines should be reinforced. Although URL validation alone is insufficient to prevent XSS breakout, applying strict sanitization to stored values that are rendered within administrative widgets is a crucial layer of defense.

Security teams can audit existing databases for anomalies by executing queries targeting single quotes within columns used by backend image lists. This proactive measure helps identify historical payloads or potential injection attempts.

Official Patches

Winter CMSCore fix applying e() helper to imageUrl in Lists widget

Fix Analysis (1)

Technical Appendix

CVSS Score
2.0/ 10
CVSS:3.1/AV:N/AC:H/PR:H/UI:R/S:U/C:N/I:L/A:N

Affected Systems

Winter CMS Backend Module

Affected Versions Detail

Product
Affected Versions
Fixed Version
winter/wn-backend-module
Winter CMS
>= 1.1.0, < 1.2.141.2.14
AttributeDetail
CWE IDCWE-79
Attack VectorNetwork (AV:N)
CVSS v3.12.0 (Low)
ImpactLow (Integrity Loss only)
Exploit StatusProof-of-Concept Available
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1059.007Command and Scripting Interpreter: JavaScript
Execution
T1189Drive-by Compromise
Initial Access
CWE-79
Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

The software does not neutralize or incorrectly neutralizes user-controlled input before it is placed in output that is used as a web page that is served to other users.

Known Exploits & Detection

GitHub Security AdvisoryAdvisory documenting the verified regression testing payload.

Vulnerability Timeline

Vulnerability patched in master branch of winter/wn-backend-module.
2023-11-20
Winter CMS release v1.2.14 made available with official patch.
2023-11-20
GitHub Security Advisory GHSA-7mpf-4465-7fc2 published.
2023-11-20

References & Sources

  • [1]GitHub Advisory Database Entry
  • [2]Winter CMS Security Advisory
  • [3]Fix Commit
  • [4]Winter CMS v1.2.14 Release Notes

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•GHSA-MPMW-F6H6-3G26
4.3

GHSA-mpmw-f6h6-3g26: Insecure Direct Object Reference in Winter CMS My Account Controller

An Insecure Direct Object Reference (IDOR) vulnerability was identified in Winter CMS version 1.2.13. The vulnerability exists within the newly introduced Backend\Controllers\MyAccount controller, which utilizes the FormController behavior without appropriate model query scoping or routing controls. This allows authenticated, low-privilege backend users to retrieve sensitive personal and administrative data of other backend accounts by enumerating record identifiers via standard CRUD routes.

Amit Schendel
Amit Schendel
3 views•5 min read
•about 3 hours ago•GHSA-FM29-4MQ3-PHG6
8.1

GHSA-FM29-4MQ3-PHG6: Missing Authorization in Winter CMS ImportExportController Behavior

Winter CMS contains an authorization bypass vulnerability within its ImportExportController behavior. Due to a design flaw in the request lifecycle processing, permissions configured for data import and export operations are not validated during AJAX-based requests, allowing authenticated users with limited privileges to perform unauthorized data exfiltration or database manipulation.

Alon Barad
Alon Barad
4 views•5 min read
•about 4 hours ago•GHSA-5CWR-5JXG-PCF6
8.4

GHSA-5CWR-5JXG-PCF6: Stored Cross-Site Scripting via Improper Cache Sanitization in Winter CMS Custom Styles

Winter CMS versions prior to 1.2.14 are vulnerable to Stored Cross-Site Scripting (XSS) within the administrative backend interface. The flaw resides in the custom styles rendering pipeline for Brand Settings and Editor Settings. An attacker with privileges to modify backend branding or editor configurations can inject arbitrary JavaScript, which is written to the cache without sanitization. Subsequent page requests that result in a cache hit completely bypass output sanitization filters, leading to JavaScript execution in the sessions of other administrative users.

Amit Schendel
Amit Schendel
5 views•6 min read
•about 5 hours ago•GHSA-P2CH-C2C3-4XM5
8.8

GHSA-P2CH-C2C3-4XM5: Cross-Site Request Forgery in Winter CMS AJAX Routing

Winter CMS contains a routing bypass vulnerability that allows Cross-Site Request Forgery (CSRF) attacks to trigger administrative AJAX handlers. Due to case-insensitivity in PHP's method resolution and an insufficiently strict check in the backend controller system, an attacker can invoke these handler methods through lowercase HTTP GET requests, bypassing default CSRF token validation.

Amit Schendel
Amit Schendel
4 views•4 min read
•about 6 hours ago•GHSA-HQ84-X37P-J6Q5
6.1

GHSA-HQ84-X37P-J6Q5: Reflected Cross-Site Scripting in Winter CMS Backend Table Widget

A reflected Cross-Site Scripting (XSS) vulnerability exists in the backend Table widget of Winter CMS. The vulnerability is located within the search input template partial, where the application retrieves raw user inputs from the query parameters and renders them directly inside a raw-text script container without sanitization. An attacker can exploit this behavior by passing a crafted tag containing raw-text terminators, leading to code execution in the context of the victim's session.

Amit Schendel
Amit Schendel
3 views•5 min read
•about 7 hours ago•GHSA-92HV-J533-69WC
3.7

GHSA-92HV-J533-69WC: Information Disclosure via ETag Conditional Matching in Wagtail CMS

An information disclosure vulnerability in the document serving subsystem of Wagtail CMS allows unauthorized users to verify if private documents match guessed SHA-1 hashes due to improper order of authentication checks.

Amit Schendel
Amit Schendel
4 views•7 min read