Summary
Payload external upload trust validation issue
Advisory details
Impact
Under certain external upload configurations, Payload could send authentication data to a destination that was not verified as trusted. If the affected request contained a valid session, this could expose that session to an unintended recipient.
You are affected if:
- You have enabled external URL-based upload retrieval, where authenticated requests can trigger it.
Patches
Payload now validates the destination before forwarding authentication data and reapplies that validation when a request changes destination.
Users should upgrade Payload packages to >= 3.90.0 or >= 4.0.0-canary.34.
Workarounds
It is recommended to update all Payload packages to >= 3.90.0 or >= 4.0.0-canary.34.
If you cannot, a valid workaround exists:
- Disable external URL-based upload retrieval where practical.
- If you cannot disable it, configure the upload header filter to remove authentication data from outbound file requests.
- Restrict access to the affected upload functionality.
References
- https://github.com/advisories/GHSA-pj5h-5q6c-3pfx
- https://github.com/payloadcms/payload/security/advisories/GHSA-pj5h-5q6c-3pfx
- https://nvd.nist.gov/vuln/detail/CVE-2026-105861
- https://github.com/payloadcms/payload/commit/ba5cf6ae20d27a2c15106cb37466419031f86e6d
- https://github.com/payloadcms/payload/releases/tag/v3.90.0
Related vulnerabilities
All Supply chain →- MEDIUMCVE-2026-96234
Microsoft Security Advisory CVE-2026-96234 - .NET and Visual Studio Information Disclosure Vulnerability
- MEDIUMCVE-2026-107804
Nginx UI: Bundled reverse proxy can bypass IP allowlists and enable shared login lockout
- CRITICALCVE-2026-108261
TinaCMS admin preview iframe loads an attacker-controlled origin from the URL fragment
- MEDIUMGHSA-8wvg-r2j4-3737
Vikunja: Assignee email addresses disclosed to read-only project members via the task assignees endpoint
- MEDIUMGHSA-3hc7-r24j-rpwc
Vikunja: Cross-project task disclosure through subtask expansion
- MEDIUMCVE-2026-107842
Contao: Protected page content is disclosed to anonymous visitors after contao.search.index_protected is disabled