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.
Fix
Patch, vendor advisory and mitigation references on NVD 3
- https://github.com/payloadcms/payload/commit/2df8238fbf17edfce335c399b90bf524ba9906a2 Patch
- https://github.com/payloadcms/payload/releases/tag/v3.90.0 Patch, Release Notes
- https://github.com/payloadcms/payload/security/advisories/GHSA-7vg8-29qx-jgj8 Vendor Advisory
Every line above is quoted from NVD, CISA, Microsoft, the vendor's own advisory or DISA; nothing is generated.
Change history 1
- First seenCVSS 7.1 · payloadcmsNVD modified 2026-10-15 00:07
Affected (CPE criteria) 35
cpe:2.3:a:payloadcms:payload:*:*:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary0:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary1:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary10:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary11:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary12:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary13:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary14:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary15:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary16:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary17:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary18:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary19:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary2:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary20:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary21:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary22:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary23:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary24:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary25:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary26:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary27:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary28:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary29:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary3:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary30:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary31:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary32:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary33:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary4:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary5:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary6:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary7:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary8:*:*:*:node.js:*:*cpe:2.3:a:payloadcms:payload:4.0.0:canary9:*:*:*:node.js:*:*