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-FM29-4MQ3-PHG6

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

Alon Barad
Alon Barad
Software Engineer

Aug 21, 2026·5 min read·14 visits

Executive Summary (TL;DR)

An authorization bypass in Winter CMS prior to 1.2.14 allows authenticated backend users with basic controller access to bypass granular import/export permission gates by interacting directly with AJAX handlers.

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.

Vulnerability Overview

The vulnerability designated as GHSA-FM29-4MQ3-PHG6 identifies an authorization bypass within Winter CMS, specifically affecting the ImportExportController behavior located in modules/backend/behaviors/ImportExportController.php.

This behavior is designed as a horizontal code-reuse mixin that allows developers to quickly equip custom backend controllers with comprehensive CSV or Excel import and export capabilities.

The attack surface exists for authenticated backend users who possess permissions to access a parent controller but are explicitly restricted from performing data imports or exports through granular permissions.

Due to an execution-order mismatch in the request lifecycle, the granular security barriers designated for import and export functions were not enforced during direct AJAX-based requests, enabling privilege escalation (CWE-862).

Root Cause Analysis

To understand the core flaw, it is necessary to examine the request-handling lifecycle of the Winter CMS backend controller class (Backend\Classes\Controller).

During controller initialization, any declared behaviors, such as ImportExportController, are instantiated, which automatically binds their respective widgets and AJAX handlers to the parent controller instance.

When a request arrives as an AJAX POST, the framework executes Backend\Classes\Controller::execAjaxHandlers() early in the execution sequence.

If the handler name matches an endpoint declared by the behavior (such as onImport or onExport), that handler runs immediately, outputs its response, and early-terminates the execution flow.

Consequently, the execution path never reaches the controller's execPageAction() method, which is the only phase where the security checkpoints in import() and export() were evaluated.

Request Lifecycle Execution Flow

The execution flow mismatch is illustrated in the sequence diagram below, which shows how direct AJAX requests completely bypass the traditional page action security barriers:

Code Analysis

Prior to the fix implemented in version 1.2.14, the behavior restricted access exclusively within the page view methods. This meant that the security policy was completely bypassed when interacting directly with the underlying AJAX handlers.

// Vulnerable execution path in ImportExportController.php
public function import()
{
    if (!$this->userHasAccess('import')) {
        abort(403); // Check was only present here!
    }
    // ... standard action logic ...
}

The official patch modified the behavior to inject authorization checks directly inside each internal handler and the download action. This modification blocks unauthorized operations during the initial state-binding process.

// Patched execution path in ImportExportController.php
public function onImport()
{
    if (!$this->userHasAccess('import')) {
        abort(403); // Added explicit handler gate
    }
    try {
        $model = $this->importGetModel();
        // ... model import logic ...
    }
    // ... error handling ...
}

This remediation ensures completeness because the authorization check is now executed immediately upon entering any entry point that manipulates state or retrieves generated documents.

Exploitation Methodology

An attacker seeking to exploit this vulnerability must first obtain valid authenticated credentials for the Winter CMS backend. The user account must have permissions to access the parent controller but be denied the specific import/export administrative actions.

To bypass the standard interface restriction, the attacker bypasses the HTML form and makes a direct POST request to the controller's endpoint, declaring the targeted AJAX handler in the headers.

POST /backend/acme/records HTTP/1.1
Host: target.local
Content-Type: application/x-www-form-urlencoded
X-Requested-With: XMLHttpRequest
X-OCTOBER-REQUEST-HANDLER: onExport
 
export_columns[]=id&export_columns[]=email&visible_columns[id]=1&visible_columns[email]=1

The server executes the query and generates the CSV file, returning a download payload with a temporary identifier. The attacker then fetches the file directly via the unguarded download path, retrieving sensitive database tables without authorization.

Impact Assessment

The vulnerability introduces severe risks to confidentiality and integrity. Since the import and export utilities handle raw database interactions, bypassing their gates allows full data exfiltration and database tampering.

An attacker can export customer lists, configuration credentials, or proprietary datasets. Additionally, by invoking the import action, the attacker can alter database values, escalate privileges of administrative accounts, or insert malicious entries.

A CVSS v3.1 base score of 8.1 reflects the impact when exploited by a low-privileged user. The attack vector is entirely remote, requires minimal complexity, and bypasses local logical partitioning.

Remediation and Mitigations

The primary remediation strategy is upgrading the Winter CMS installation to version 1.2.14 or later. This can be achieved through composer by running the update command.

If upgrading immediately is not possible, security teams should apply the code patch manually to modules/backend/behaviors/ImportExportController.php using the commit modifications.

As a temporary workaround, network administrators can deploy Web Application Firewall (WAF) rules to inspect incoming requests. Specifically, log and block any POST requests to /backend routes that contain the request handler header value onExport or onImport if the authenticated user lacks matching privileges.

Fix Analysis (1)

Technical Appendix

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

Affected Systems

Winter CMS instances utilizing the Backend module and implementing the ImportExportController behavior in custom components.

Affected Versions Detail

Product
Affected Versions
Fixed Version
Winter CMS
Winter CMS
>= 1.0.0, < 1.2.141.2.14
AttributeDetail
CWE IDCWE-862 (Missing Authorization)
Attack VectorNetwork (Unauthenticated or low-privilege backend session required)
CVSS v3.1 Score8.1 (High)
ImpactPrivilege Escalation, Unauthorized Data Exfiltration, Database Manipulation
Exploit StatusPoC / Regression Test validation
CISA KEV StatusNot Listed

MITRE ATT&CK Mapping

T1548Abuse Elevation Control Mechanism
Privilege Escalation
T1114Email Collection / Data Exfiltration
Collection
CWE-862
Missing Authorization

The software does not perform an authorization check when an actor attempts to access a resource or perform an action.

Vulnerability Timeline

Vulnerability identified and official patch committed to repository
2023-11-20
Winter CMS Version 1.2.14 released containing the mitigation
2023-11-21
GitHub Security Advisory GHSA-FM29-4MQ3-PHG6 published
2023-11-22

References & Sources

  • [1]GHSA-FM29-4MQ3-PHG6 Security Advisory
  • [2]Fix Commit 84c81f153f2dc3e
  • [3]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

•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