Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as low-privilege user
-
ExploitRequest signed upload URL for cross-collection key
-
ExecutionOverwrite existing S3 object via PUT
-
ImpactCorrupt/replace victim collection's file
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
|
| Exploitation Conditions | Exploitation requires ALL of: (1) an authenticated user account (PR:L); (2) @payloadcms/storage-s3 before 3.90.0 (or canary before 4.0.0-canary.34); (3) client uploads enabled (clientUploads: true) for multiple upload collections; (4) those collections sharing the same S3 bucket; and (5) useCompositePrefixes set to false or left unset. Under these conditions the attacker can request a signed URL and overwrite an existing object owned by a different collection, bypassing that collection's access controls and prior file validation. Limiting factors: it is NOT remote-unauthenticated (a valid session is needed), and deployments not using S3 client uploads with a shared bucket, or those with useCompositePrefixes enabled, are not affected. |
| Impact | This is a genuine but moderate-priority, access-control integrity flaw rather than a critical remote-code issue. The provided CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:L) scores 7.1 (High): network-reachable, low complexity, but requiring low-level privileges (PR:L) - i.e. an authenticated user - and delivering high integrity impact (object overwrite) with low availability impact and NO confidentiality impact. This aligns with CWE-639 (authorization bypass via user-controlled key / IDOR). No EPSS score, no CISA KEV listing, and no public exploit code are present in the input, so exploitation status is: no public exploit identified at time of analysis. The absence of KEV/EPSS data combined with the authenticated-only, config-dependent nature strongly suggests this is not a mass-exploitation candidate. The main caveat is that exploitation is gated behind a specific, non-default-ish configuration (clientUploads enabled across multiple collections sharing one bucket with useCompositePrefixes false/unset), which materially narrows the exposed population below what the raw 7.1 implies. Prioritize patching for Payload deployments that use the S3 client-upload feature; deprioritize for those not using shared-bucket client uploads. |
| Exploit ScenarioDerived | In a Payload instance where multiple upload collections share one S3 bucket with client uploads enabled and useCompositePrefixes off, an authenticated low-privilege user requests a signed upload URL for a filename matching an object in another collection, then PUTs their own content to overwrite the victim object - bypassing that collection's access controls and file validation. No public exploit code is identified; the attack requires only a valid authenticated session and knowledge/guessing of a target key. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 06, 2026
An authenticated user of Payload CMS can overwrite an existing S3 object owned by a different upload collection when the @payloadcms/storage-s3 plugin is used with client uploads enabled across multiple collections that share a single bucket and leave useCompositePrefixes at its default (false or unset). Because the signed-URL generation path did not bind the target object key to the requesting collection, the attacker's upload silently replaces the victim collection's stored file, bypassing that collection's access controls and any prior file-type/size validation. The flaw yields high integrity impact with no confidentiality loss (CVSS 7.1), requires an authenticated session (PR:L) plus the specific shared-bucket client-upload configuration, and no public exploit code or CISA KEV entry was identified at time of analysis.
RemediationAI
Vendor-released patch: upgrade @payloadcms/storage-s3 to 3.90.0 (or 4.0.0-canary.34 for canary tracks), which adds IfNoneMatch: '*' to the presigned PUT and an If-None-Match: '*' client header so S3 rejects writes to keys that already exist with HTTP 412, plus explicit headers and error surfacing in S3ClientUploadHandler. After upgrading, update the bucket CORS policy to permit the PUT method and the If-None-Match request header from your site, otherwise browser client uploads will fail the preflight and the fix will appear to break uploads. If immediate upgrade is not possible, the most effective compensating control is to set useCompositePrefixes: true on every upload collection sharing the bucket so keys become collection-scoped; the trade-off is a changed key layout that alters existing object paths and may require migrating or re-uploading assets and updating any URL assumptions. Alternatively, split collections across distinct S3 buckets or disable clientUploads so uploads pass through the server-side authorization path, at the cost of server bandwidth and Vercel's ~4.5MB server upload limit. As a defense-in-depth backstop against overwrites generally, apply a bucket policy or S3 Object Lock/versioning posture that denies unconditional PUT overwrites of existing keys, and treat any pre-3.90.0 object store as potentially tampered where shared-bucket client uploads were in use. Review references: advisory https://github.com/payloadcms/payload/security/advisories/GHSA-7vg8-29qx-jgj8 and release https://github.com/payloadcms/payload/releases/tag/v3.90.0.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 5 packages in npm, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The issue is an authorization bypass through a user-controlled key (CWE-639) in the S3 upload flow of Payload's object-storage adapter. When clientUploads is enabled, the server issues a presigned S3 PUT URL and the browser writes the file directly to the bucket, so object-level authorization must be enforced by the key the server generates. With multiple upload collections pointing at the same bucket and useCompositePrefixes disabled, collection prefixes collide, and the signed URL handler in packages/storage-s3/src/generateSignedURL.ts would happily mint a URL for a key already occupied by another collection's asset. The upstream fix hardens this at two layers: getGenerateSignedURLHandler now stamps IfNoneMatch: '*' onto the presigned PUT (S3's conditional-write primitive, which returns HTTP 412 Precondition Failed if the object already exists) and forwards an If-None-Match: '*' request header, while S3ClientUploadHandler.ts now passes explicit headers and throws on a non-ok response so the client surfaces the failure instead of assuming success. The accompanying docs change requires that CORS for the bucket allow the PUT method and the If-None-Match request header; without that CORS update, the browser-side conditional write will be blocked. The associated integration test asserts that a second upload of an existing key returns status 412 and that the stored bytes remain the original file.
Know when Payload gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:L/SC:N/SI:N/SA:N
Network-reachable with an authenticated session (PR:L), no UI; overwriting another collection's object is high integrity impact, minor availability impact, and no data disclosure (C:N).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
Payload is a free and open source headless content management system. In @payloadcms/storage-s3 versions before 3.90.0 and canary versions before 4.0.0-canary.34, an authenticated user can overwrite an existing S3 object belonging to another upload collection when client uploads are enabled for multiple collections sharing a bucket and useCompositePrefixes is false or unset. This bypasses the target collection's access controls and prior file validation. This issue is fixed in versions 3.90.0 and 4.0.0-canary.34.
Technical POC Analysis
Evidence basis: the GitHub advisory GHSA-7vg8-29qx-jgj8 and its CVSS v4 block.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Payload CMS deployments using the @payloadcms/storage-s3 plugin with client uploads enabled across multiple collections sharing a single bucket are vulnerable to unauthorized file overwrites by authenticated users. This could allow an attacker with valid credentials to silently replace files owned by other collections, compromising data integrity and bypassing access controls. Leadership should be concerned because this affects the integrity of stored content, potentially leading to data loss, regulatory compliance issues, and reputational damage if exploited.
Set useCompositePrefixes to true; segregate S3 buckets per collection; restrict client uploads to trusted users; implement strict IAM policies and monitoring for unauthorized object changes.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
An arbitrary file upload vulnerability in the file upload module of PayloadCMS v0.15.0 allows attackers to execute arbit
Prototype pollution in Payload CMS's @payloadcms/plugin-import-export module lets an unauthenticated remote attacker sub
Field-level access control can be bypassed in Payload CMS's document duplicate operation, letting a caller with access t
Duplicate order processing in @payloadcms/plugin-ecommerce allows remote, unauthenticated attackers to have a single Str
Malformed multipart request bodies sent to Payload CMS versions 3.0.0 through 3.89.x and 4.0.0-canary.0 through 4.0.0-ca
API key disclosure in Payload CMS lets an authenticated user with ordinary read access to other users' authentication do
Authenticated users who can update an auth collection document in Payload CMS can change the password field on that docu
Payload CMS versions before 3.90.0 and canary versions before 4.0.0-canary.34 contain an authorization bypass in relatio
Unauthorized read access to stored form submissions and form email configuration in Payload CMS deployments running the
Payload CMS releases before 3.90.0 (and canary builds before 4.0.0-canary.34) expose an orderable reorder endpoint that
Payload CMS prior to 3.73.0 has a SQL injection vulnerability when querying structured data, enabling database compromis
SQL injection in Payload CMS 3.0.0 through before 3.88.0 (and 4.0.0-canary builds before 4.0.0-canary.27) allows remote
EUVD-2026-93513
GHSA-7vg8-29qx-jgj8
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB