CVE-2026-59965: @jhb.software/payload-alt-text-plugin Authorization Bypass via overrideAccess Omission
A missing overrideAccess: false flag in the plugin's Payload Local API calls lets any logged-in user read and overwrite alt text and keyword fields on upload documents that should be restricted to…

The problem
The plugin registers two REST endpoints, POST /api/alt-text-plugin/generate and /bulk, whose handler functions call Payload's Local API (findByID and update) without setting overrideAccess: false.
Payload evaluates shouldOverrideAccess = overrideAccess !== false, so omitting the parameter silently defaults to true, and collection-level access functions are never called. Any authenticated session, regardless of role, can read and overwrite the alt and keywords fields on arbitrary upload documents.
Proof of concept
A working proof-of-concept for CVE-2026-59965 in @jhb.software/payload-alt-text-plugin, with the exact payload below.
curl -i -b "payload-token=<LOW_PRIV_TOKEN>" \
-H "Content-Type: application/json" \
-X POST http://localhost:3000/api/alt-text-plugin/generate \
--data '{"collection":"media","id":"doc-001","locale":"en","update":true}'The root cause is in generateAltText.ts (lines 31 and 121) and bulkGenerateAltTexts.ts (lines 120 and 170). Both files omit overrideAccess: false and the req object from their payload.findByID and payload.update calls.
Because Payload's internal check is shouldOverrideAccess = overrideAccess !== false, passing nothing evaluates undefined !== false as true, bypassing every collection access rule. The fix is mechanical: add overrideAccess: false and forward req to each Local API call so Payload evaluates the real user's permissions.
A direct Local API call with overrideAccess: false by the same low-privilege user correctly throws AccessError, proving the collection access rules are sound and the plugin endpoint is the sole bypass vector (CWE-863).
The fix
Upgrade to @jhb.software/payload-alt-text-plugin v0.8.0 or later. The patch adds overrideAccess: false and req to every findByID and update call inside generateAltText.ts and bulkGenerateAltTexts.ts. No configuration changes are needed after upgrading.
Related research
- high · 8.6CVE-2026-55638CVE-2026-55638: 9router Unauthenticated LLM Proxy Access via /codex Rewrite Authorization Bypass
- high · 8.2CVE-2026-71315CVE-2026-71315: Nuxt appMiddleware Auth Bypass via Mixed-Case Route Rule Keys
- highCVE-2026-70472CVE-2026-70472: Flowise Cross-Workspace Credential IDOR in OpenAI Assistants Vector Store
- highCVE-2026-70471CVE-2026-70471: Flowise RBAC Bypass Leading to Workspace Variables Disclosure