CVE-2026-39397: @delmaredigital/payload puck @delmaredigital/payload-puc Is Missing Authorization On Vulnerability

CRITICAL
Advisory Identifier: GHSA-65w6-pf7x-5g85
CVSS 9.4
CWE-862
Published
Advisory Summary

CVE-2026-39397 is a CRITICAL (CVSS 9.4) @delmaredigital/payload-puc is missing authorization on vulnerability (CWE-862: Missing Authorization) affecting @delmaredigital/payload puck libraries in the npm ecosystem. The issue involves @delmaredigital/payload-puc is missing authorization on /api/puck/* crud endpoints allows unauthenticated access to puck-registered collections. Remediation is available by upgrading affected packages to version 0.6.23.

CVE-2026-39397 at a Glance

CVE Identifier CVE-2026-39397
GHSA Identifier GHSA-65w6-pf7x-5g85
Severity CRITICAL
CVSS v3.1 Base Score 9.4
CWE Classification CWE-862: Missing Authorization
Affected Product @delmaredigital/payload puck
Package Ecosystem npm
Published Date
Last Updated

Security Impact

CVSS: 9.4

The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L).

Attack Vector Network (AV:N)
Attack Complexity Low (AC:L)
Privileges Required None (PR:N)
User Interaction None (UI:N)
Scope Unchanged (S:U)
Confidentiality High (C:H)
Integrity High (I:H)
Availability Low (A:L)

How to Fix CVE-2026-39397

To remediate this vulnerability, upgrade all affected @delmaredigital/payload puck dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

@delmaredigital/payload-puck fixed: 0.6.23
npm install @delmaredigital/payload-puck@0.6.23
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

npm ls @delmaredigital/payload-puck

How to Check if You Are Affected

To determine whether your Node.js application is affected by CVE-2026-39397, inspect your project dependencies using npm:

npm ls @delmaredigital/payload-puck

Analyze the terminal output to locate any version of @delmaredigital/payload puck in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 0.6.23), your application is affected.

Note: The npm ls @delmaredigital/payload-puck command inspects dependencies declared in your package.json and lockfile; it does not perform automated runtime dynamic scanning.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-862: Missing Authorization, where the product does not perform an authorization check when an actor attempts to access a resource or perform an action. In @delmaredigital/payload puck, 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

### Impact All `/api/puck/*` CRUD endpoint handlers registered by `createPuckPlugin()` called Payload's local API with the default `overrideAccess: true`, bypassing all collection-level access control. The `access` option passed to `createPuckPlugin()` and any `access` rules defined on Puck-registered collections were silently ignored on these endpoints. An unauthenticated remote attacker could: - List all documents (including drafts) in any Puck-registered collection - Read any document by ID (including drafts) - Create new documents with arbitrary field values - Update any document (including bypassing field-level access rules) - Delete any document - Read version history and restore arbitrary versions **In typical installations**, the affected scope is the collection backing the website's pages (default slug: `pages`). For most users this means an attacker could read, modify, create, or delete every page on the website — including unpublished drafts and version history. **Scope is limited to collections explicitly registered with `createPuckPlugin()`** — the endpoints validate the collection slug against an allowlist, so attackers cannot pivot to other Payload collections such as `users`, `media`, or business data not exposed to the plugin. The auto-created `puck-templates`, `puck-ai-prompts`, and `puck-ai-context` collections are also outside the allowlist; they have their own dedicated endpoints with separate authentication. Other endpoints in the plugin (AI, styles, prompts, context, and the Next.js API route factories in `src/api/`) were unaffected — they had their own authentication checks. ### Patches Fixed in **0.6.23**. All endpoint handlers in `src/endpoints/index.ts` now pass `overrideAccess: false` and forward `req` to Payload's local API, so collection-level access rules are evaluated against the current user. ### Workarounds If you cannot upgrade immediately, place a reverse-proxy or middleware authentication check in front of `/api/puck/*` to require an authenticated session before requests reach the plugin's handlers.

CVE-2026-39397 Affected @delmaredigital/payload puck Versions

1 component(s)
Fixed Versions:
0.6.23
Product / Package Ecosystem Affected Versions Fixed Version
@delmaredigital/payload-puck
npm
< 0.6.23
0.6.23

References

Frequently Asked Questions

What is CVE-2026-39397?
CVE-2026-39397 is a security vulnerability in @delmaredigital/payload puck involving @delmaredigital/payload-puc is missing authorization on /api/puck/* CRUD endpoints allows unauthenticated access to Puck-registered collections under CWE-862: Missing Authorization.
Which @delmaredigital/payload puck versions are affected?
Affected versions include releases prior to 0.6.23 across affected packages: @delmaredigital/payload-puck.
What version fixes CVE-2026-39397?
Upgrading to 0.6.23 (or the latest patched release for your respective branch) resolves the vulnerability.
Is @delmaredigital/payload-puck affected?
Yes, @delmaredigital/payload-puck is affected in releases prior to 0.6.23. Upgrade your dependency to 0.6.23 or later.
What is the CVSS score of CVE-2026-39397?
CVE-2026-39397 has a CVSS v3.1 base score of 9.4 (CRITICAL) with vector string CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L.
What CWE is associated with CVE-2026-39397?
CVE-2026-39397 is classified under CWE-862: Missing Authorization (The product does not perform an authorization check when an actor attempts to access a resource or perform an action.).
How can I check npm dependencies for CVE-2026-39397?
Run the dependency tree command: 'npm ls @delmaredigital/payload-puck'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-65w6-pf7x-5g85",
  "modified" : "2026-04-08T00:15:54Z",
  "published" : "2026-04-08T00:15:54Z",
  "aliases" : [ "CVE-2026-39397" ],
  "summary" : "@delmaredigital/payload-puc is missing authorization on /api/puck/* CRUD endpoints allows unauthenticated access to Puck-registered collections",
  "details" : "### Impact\n\nAll `/api/puck/*` CRUD endpoint handlers registered by `createPuckPlugin()` called Payload's local API with the default `overrideAccess: true`, bypassing all collection-level access control. The `access` option passed to `createPuckPlugin()` and any `access` rules defined on Puck-registered collections were silently ignored on these endpoints.\n\nAn unauthenticated remote attacker could:\n\n- List all documents (including drafts) in any Puck-registered collection\n- Read any document by ID (including drafts)\n- Create new documents with arbitrary field values\n- Update any document (including bypassing field-level access rules)\n- Delete any document\n- Read version history and restore arbitrary versions\n\n**In typical installations**, the affected scope is the collection backing the website's pages (default slug: `pages`). For most users this means an attacker could read, modify, create, or delete every page on the website — including unpublished drafts and version history.\n\n**Scope is limited to collections explicitly registered with `createPuckPlugin()`** — the endpoints validate the collection slug against an allowlist, so attackers cannot pivot to other Payload collections such as `users`, `media`, or business data not exposed to the plugin. The auto-created `puck-templates`, `puck-ai-prompts`, and `puck-ai-context` collections are also outside the allowlist; they have their own dedicated endpoints with separate authentication.\n\nOther endpoints in the plugin (AI, styles, prompts, context, and the Next.js API route factories in `src/api/`) were unaffected — they had their own authentication checks.\n\n### Patches\n\nFixed in **0.6.23**. All endpoint handlers in `src/endpoints/index.ts` now pass `overrideAccess: false` and forward `req` to Payload's local API, so collection-level access rules are evaluated against the current user.\n\n### Workarounds\n\nIf you cannot upgrade immediately, place a reverse-proxy or middleware authentication check in front of `/api/puck/*` to require an authenticated session before requests reach the plugin's handlers.",
  "severity" : [ {
    "type" : "CVSS_V3",
    "score" : "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "npm",
      "name" : "@delmaredigital/payload-puck"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "0.6.23"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/delmaredigital/payload-puck/security/advisories/GHSA-65w6-pf7x-5g85"
  }, {
    "type" : "ADVISORY",
    "url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-39397"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/delmaredigital/payload-puck/issues/7"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/delmaredigital/payload-puck/commit/9148201c6bbfa140d44546438027a2f8a70f79a4"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/delmaredigital/payload-puck"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-862" ],
    "severity" : "CRITICAL",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-04-08T00:15:54Z",
    "nvd_published_at" : "2026-04-07T21:17:18Z"
  }
}