CVE-2026-54256: Winter Authenticated IDOR Vulnerability
MODERATECVE-2026-54256 is a MODERATE (CVSS 5.4) authenticated idor vulnerability (CWE-284: Improper Access Control) affecting Winter libraries in the Packagist ecosystem. The issue involves authenticated idor in backend fileupload widget allows cross-user access to attachment metadata. Remediation is available by upgrading affected packages to version 1.2.13.
CVE-2026-54256 at a Glance
Security Impact
CVSS: 5.4
The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N).
How to Fix CVE-2026-54256
To remediate this vulnerability, upgrade all affected Winter dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
Upgrade winter/wn-backend-module to 1.2.13
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
inspect dependencies for winter/wn-backend-module
How to Check if You Are Affected
To determine whether your application is affected by CVE-2026-54256, inspect your project dependencies for Winter:
inspect dependencies for winter/wn-backend-module
Analyze the terminal output to locate any version of Winter in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 1.2.13), your application is affected.
Note: Verify declared build manifests and deployed runtime container environments.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-284: Improper Access Control, where the product does not restrict or incorrectly restricts access to a resource from an unauthorized actor. In Winter, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-54256 Affected Winter Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
winter/wn-backend-module
|
Packagist |
< 1.2.13
|
1.2.13
|
References
Frequently Asked Questions
What is CVE-2026-54256?
Which Winter versions are affected?
What version fixes CVE-2026-54256?
Is winter/wn-backend-module affected?
What is the CVSS score of CVE-2026-54256?
What CWE is associated with CVE-2026-54256?
How can I check Packagist dependencies for CVE-2026-54256?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-3277-h8g9-qj5f",
"modified" : "2026-08-20T18:39:56Z",
"published" : "2026-08-20T18:39:56Z",
"aliases" : [ "CVE-2026-54256" ],
"summary" : "Winter: Authenticated IDOR in backend FileUpload widget allows cross-user access to attachment metadata",
"details" : "### Impact\n\nThe backend `FileUpload` form widget trusted an attacker-controlled `file_id` POST parameter when resolving the attachment it operates on. The lookup (`FileUpload::getFileRecord()`) resolved the posted id against the global `system_files` table without verifying that the file belonged to the widget's own relation, parent record, or deferred-binding session.\n\nAny authenticated backend user who can reach a form containing a `fileupload` field — including the built-in **My Account** avatar field, which requires no specific backend permission — could therefore target a `System\\Models\\File` record belonging to another user or record and:\n\n- modify its `title` and `description` via `onSaveAttachmentConfig`, and\n- change its `sort_order` via `onSortAttachments` (which passed posted ids\n straight to `setSortableOrder()`, an unscoped `UPDATE ... WHERE id = ?`).\n\nThe same unscoped lookup is reached by `onLoadAttachmentConfig`, `onSaveAttachmentConfig`, and `onRemoveAttachment`. Because all attachments share the single `System\\Models\\File` model and `system_files` table, an attacker was not limited to other users' avatars — any attachment on any model could be referenced by id. Attachment ids are sequential integers and are easily enumerated.\n\nThe confirmed impact is unauthorized integrity modification of arbitrary attachment metadata and ordering.\n\nCSRF tokens are still verified on all POST requests, so an attacker must be authenticated to the backend with a valid session. To exploit this issue an attacker needs a backend account with any level of access.\n\n### Patches\n\nThe `FileUpload` widget now scopes every `file_id` lookup to the widget's own relation, including any files bound through the current deferred-binding session, so a posted id can no longer reference an unrelated `System\\Models\\File` record:\n\n- `getFileRecord()` resolves the id through `getRelationObject()->withDeferred($this->sessionKey)->find(...)` rather than the global file model. This covers `onLoadAttachmentConfig`, `onSaveAttachmentConfig`, and `onRemoveAttachment`.\n- `onSortAttachments()` intersects the posted ids with the ids that actually belong to the relation before calling `setSortableOrder()`.\n\nThis security issue has been fixed as of **v1.2.13** (commit [`9cb0ae5f9d837db141ab111c6a7de8eed9603d25`](https://github.com/wintercms/winter/commit/9cb0ae5f9d837db141ab111c6a7de8eed9603d25)).\n\n### Workarounds\n\nThere is no supported workaround other than upgrading. If you cannot upgrade immediately, you may apply the fix manually in `modules/backend/formwidgets/FileUpload.php`:\n\n1. In `getFileRecord()`, replace `$this->getRelationModel()->find(post('file_id'))` with `$this->getRelationObject()->withDeferred($this->sessionKey)->find(post('file_id'))`.\n2. In `onSortAttachments()`, filter the posted `sortOrder` ids to those returned by `$this->getRelationObject()->withDeferred($this->sessionKey)->pluck($keyName)` before calling `setSortableOrder()`.",
"severity" : [ {
"type" : "CVSS_V3",
"score" : "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "Packagist",
"name" : "winter/wn-backend-module"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"fixed" : "1.2.13"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 1.2.12"
}
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/wintercms/winter/security/advisories/GHSA-3277-h8g9-qj5f"
}, {
"type" : "WEB",
"url" : "https://github.com/wintercms/winter/security/advisories/GHSA-qq9m-vfv4-pj5w"
}, {
"type" : "WEB",
"url" : "https://github.com/wintercms/winter/commit/9cb0ae5f9d837db141ab111c6a7de8eed9603d25"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/wintercms/winter"
}, {
"type" : "WEB",
"url" : "https://github.com/wintercms/winter/releases/tag/v1.2.13"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-284", "CWE-639" ],
"severity" : "MODERATE",
"github_reviewed" : true,
"github_reviewed_at" : "2026-08-20T18:39:56Z",
"nvd_published_at" : null
}
}