API key disclosure in Payload CMS through ordinary document reads
Key facts
- Attack vector
- Network
- Privileges required
- Low
- User interaction
- None
- Attack complexity
- Low
- Attack requirements
- Present
- Impact type
- Information disclosure, Security bypass
- Confidentiality · integrity · availability
- High · High · High
- Fix status
- Fixed
Attack profile from CVSS 4.0 · CNA. Fix status from CNA and GitHub. Impact type from CWE-201 and CWE-862.
Summary
Payload CMS is affected from 3.0.0 before 3.90.0 and canary versions from 4.0.0-canary.0 before 4.0.0-canary.34. Missing authorization (CWE-862) lets a user with ordinary read access to other authentication documents in a collection with useAPIKey enabled obtain their active API keys. An attacker with low privileges and network access can use those keys to act with the target accounts' permissions until the keys are rotated or disabled.
Written with Claude Haiku 5.5 from the sources below · 2026-10-29
Description from the CNA
Payload is a free and open source headless content management system. In versions from 3.0.0 before 3.90.0 and canary versions before 4.0.0-canary.34, users with ordinary read access to other authentication documents in a collection with useAPIKey enabled can obtain active API keys and exercise the target accounts' permissions until those keys are rotated or disabled. This issue is fixed in versions 3.90.0 and 4.0.0-canary.34.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- None
- Automatable
- No
- Technical impact
- Total
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
| Vendor | Product | Affected versions | Fixed in | Status | Source |
|---|---|---|---|---|---|
| payloadcms | payload | 3.0.0 to before 3.90.0; 4.0.0-canary.0 to before 4.0.0-canary.34 | 3.90.0, 4.0.0-canary.34 | Patch available | CNA |
| — | payload (npm) | 3.0.0 to before 3.90.0 | 3.90.0 | Patch available | GHSA-238x-w2j9-gwwr |
| — | payload (npm) | 4.0.0-canary.0 to before 4.0.0-canary.34 | 4.0.0-canary.34 | Patch available | GHSA-238x-w2j9-gwwr |
- payload Vendorpayloadcms Affected 3.0.0 to before 3.90.0; 4.0.0-canary.0 to before 4.0.0-canary.34 Fixed in 3.90.0, 4.0.0-canary.34 Patch available CNA
- payload (npm) Vendor— Affected 3.0.0 to before 3.90.0 Fixed in 3.90.0 Patch available GHSA-238x-w2j9-gwwr
- payload (npm) Vendor— Affected 4.0.0-canary.0 to before 4.0.0-canary.34 Fixed in 4.0.0-canary.34 Patch available GHSA-238x-w2j9-gwwr
CPE configurations NVD · 35
| CPE | Versions | Role | Vendor |
|---|---|---|---|
| cpe:2.3:a:payloadcms:payload:*:*:*:*:*:node.js:*:* | 3.0.0 to before 3.90.0 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary0:*:*:*:node.js:*:* | 4.0.0 canary0 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary1:*:*:*:node.js:*:* | 4.0.0 canary1 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary10:*:*:*:node.js:*:* | 4.0.0 canary10 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary11:*:*:*:node.js:*:* | 4.0.0 canary11 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary12:*:*:*:node.js:*:* | 4.0.0 canary12 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary13:*:*:*:node.js:*:* | 4.0.0 canary13 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary14:*:*:*:node.js:*:* | 4.0.0 canary14 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary15:*:*:*:node.js:*:* | 4.0.0 canary15 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary16:*:*:*:node.js:*:* | 4.0.0 canary16 | Vulnerable | payloadcms |
- cpe:2.3:a:payloadcms:payload:*:*:*:*:*:node.js:*:* Versions 3.0.0 to before 3.90.0 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary0:*:*:*:node.js:*:* Versions 4.0.0 canary0 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary1:*:*:*:node.js:*:* Versions 4.0.0 canary1 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary10:*:*:*:node.js:*:* Versions 4.0.0 canary10 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary11:*:*:*:node.js:*:* Versions 4.0.0 canary11 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary12:*:*:*:node.js:*:* Versions 4.0.0 canary12 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary13:*:*:*:node.js:*:* Versions 4.0.0 canary13 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary14:*:*:*:node.js:*:* Versions 4.0.0 canary14 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary15:*:*:*:node.js:*:* Versions 4.0.0 canary15 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary16:*:*:*:node.js:*:* Versions 4.0.0 canary16 Vulnerable ·payloadcms
Show 25 more CPE
| CPE | Versions | Role | Vendor |
|---|---|---|---|
| cpe:2.3:a:payloadcms:payload:4.0.0:canary17:*:*:*:node.js:*:* | 4.0.0 canary17 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary18:*:*:*:node.js:*:* | 4.0.0 canary18 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary19:*:*:*:node.js:*:* | 4.0.0 canary19 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary2:*:*:*:node.js:*:* | 4.0.0 canary2 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary20:*:*:*:node.js:*:* | 4.0.0 canary20 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary21:*:*:*:node.js:*:* | 4.0.0 canary21 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary22:*:*:*:node.js:*:* | 4.0.0 canary22 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary23:*:*:*:node.js:*:* | 4.0.0 canary23 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary24:*:*:*:node.js:*:* | 4.0.0 canary24 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary25:*:*:*:node.js:*:* | 4.0.0 canary25 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary26:*:*:*:node.js:*:* | 4.0.0 canary26 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary27:*:*:*:node.js:*:* | 4.0.0 canary27 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary28:*:*:*:node.js:*:* | 4.0.0 canary28 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary29:*:*:*:node.js:*:* | 4.0.0 canary29 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary3:*:*:*:node.js:*:* | 4.0.0 canary3 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary30:*:*:*:node.js:*:* | 4.0.0 canary30 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary31:*:*:*:node.js:*:* | 4.0.0 canary31 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary32:*:*:*:node.js:*:* | 4.0.0 canary32 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary33:*:*:*:node.js:*:* | 4.0.0 canary33 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary4:*:*:*:node.js:*:* | 4.0.0 canary4 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary5:*:*:*:node.js:*:* | 4.0.0 canary5 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary6:*:*:*:node.js:*:* | 4.0.0 canary6 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary7:*:*:*:node.js:*:* | 4.0.0 canary7 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary8:*:*:*:node.js:*:* | 4.0.0 canary8 | Vulnerable | payloadcms |
| cpe:2.3:a:payloadcms:payload:4.0.0:canary9:*:*:*:node.js:*:* | 4.0.0 canary9 | Vulnerable | payloadcms |
- cpe:2.3:a:payloadcms:payload:4.0.0:canary17:*:*:*:node.js:*:* Versions 4.0.0 canary17 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary18:*:*:*:node.js:*:* Versions 4.0.0 canary18 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary19:*:*:*:node.js:*:* Versions 4.0.0 canary19 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary2:*:*:*:node.js:*:* Versions 4.0.0 canary2 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary20:*:*:*:node.js:*:* Versions 4.0.0 canary20 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary21:*:*:*:node.js:*:* Versions 4.0.0 canary21 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary22:*:*:*:node.js:*:* Versions 4.0.0 canary22 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary23:*:*:*:node.js:*:* Versions 4.0.0 canary23 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary24:*:*:*:node.js:*:* Versions 4.0.0 canary24 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary25:*:*:*:node.js:*:* Versions 4.0.0 canary25 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary26:*:*:*:node.js:*:* Versions 4.0.0 canary26 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary27:*:*:*:node.js:*:* Versions 4.0.0 canary27 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary28:*:*:*:node.js:*:* Versions 4.0.0 canary28 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary29:*:*:*:node.js:*:* Versions 4.0.0 canary29 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary3:*:*:*:node.js:*:* Versions 4.0.0 canary3 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary30:*:*:*:node.js:*:* Versions 4.0.0 canary30 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary31:*:*:*:node.js:*:* Versions 4.0.0 canary31 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary32:*:*:*:node.js:*:* Versions 4.0.0 canary32 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary33:*:*:*:node.js:*:* Versions 4.0.0 canary33 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary4:*:*:*:node.js:*:* Versions 4.0.0 canary4 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary5:*:*:*:node.js:*:* Versions 4.0.0 canary5 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary6:*:*:*:node.js:*:* Versions 4.0.0 canary6 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary7:*:*:*:node.js:*:* Versions 4.0.0 canary7 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary8:*:*:*:node.js:*:* Versions 4.0.0 canary8 Vulnerable ·payloadcms
- cpe:2.3:a:payloadcms:payload:4.0.0:canary9:*:*:*:node.js:*:* Versions 4.0.0 canary9 Vulnerable ·payloadcms
Remediation
Update Payload to version 3.90.0 or 4.0.0-canary.34, which fix the flaw.
Written with Claude Haiku 5.5 from the sources below · 2026-10-29
- Fix · CNA payload (payloadcms) Fixed in 3.90.0, 4.0.0-canary.34
- Fix · GHSA-238x-w2j9-gwwr payload (npm) Fixed in 3.90.0 Advisory →
- Fix · GHSA-238x-w2j9-gwwr payload (npm) Fixed in 4.0.0-canary.34 Advisory →
Timeline
- 2026-10-06 Threatist record created from CVE-2026-105849
- 2026-10-06 CISA SSVC decision points changed
- 2026-10-06 Priority changed: MEDIUM → LOW
- 2026-10-06 Alias added: GHSA-238x-w2j9-gwwr
- 2026-10-06 Fix available: npm/[email protected], npm/[email protected] · GHSA-238x-w2j9-gwwr
- 2026-10-06 CVSS score added · GHSA-238x-w2j9-gwwr
- 2026-10-06 Weakness changed · GHSA-238x-w2j9-gwwr
- 2026-10-06 4 new references · GHSA-238x-w2j9-gwwr
- 2026-10-15 CVSS score added · NVD
References
More payloadcms Payload vulnerabilities
- TI-2026-20653 Payload has an SQL Injection in JSON/RichText Queries on PostgreSQL/SQLite Adapters CVSS 3.1CRITICAL 9.8
- TI-2026-68608 Payload CMS lets attackers update collection documents CVSS 3.1CRITICAL 9.8
- TI-2026-68606 Remote code execution in Payload Form Builder plugin CVSS 3.1CRITICAL 10.0
- TI-2026-68612 Payload authentication token field handling issue CVSS 4.0CRITICAL 9.2
- TI-2026-26995 Payload has Unvalidated Input in Password Recovery Endpoints CVSS 3.1CRITICAL 9.1
- TI-2026-68489 Field access control bypass in Payload duplicate operation CVSS 4.0CRITICAL 9.3
Sources
- CVE-2026-105849 · CVE Program
- CVE-2026-105849 · NVD
- FIRST EPSS
- GHSA-238x-w2j9-gwwr · GitHub Advisory Database · CC BY 4.0
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences