/

CVE-2026-105860

Severity:

HIGH RISK

(7.1)

Missing Authorization (CWE-862) in Payload Multi-Tenant

CVE-2026-105860

Analyzed

Vulnerability type

Category:

Missing Authorization

CWE:

CWE-862

Impact:

Unauthorized tenant access and privilege escalation

Severity:

HIGH RISK

(7.1)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

Payload's multi-tenant plugin may allow an authenticated user to assign their own account to tenants they are not authorized to access. The risk arises when the default tenant array field access behavior is used without custom checks that validate tenant membership and authorization.

Payload's multi-tenant plugin may allow an authenticated user to assign their own account to tenants they are not authorized to access. The risk arises when the default tenant array field access behavior is used without custom checks that validate tenant membership and authorization.

Affected context

The issue occurs in deployments using the Payload multi-tenant plugin with its default tenant array field access behavior. It may affect applications where authenticated users can update account tenant assignments and where custom create and update authorization functions have not been configured for the tenants array field.

The issue occurs in deployments using the Payload multi-tenant plugin with its default tenant array field access behavior. It may affect applications where authenticated users can update account tenant assignments and where custom create and update authorization functions have not been configured for the tenants array field.

Exploit preconditions

  • Attack surface: Tenant membership or account update functionality exposed by the application
  • Required access: An authenticated user account with permission to submit relevant account or tenant-assignment changes
  • Trigger point: Creation or update of the user's tenant array field
  • Why exploitation is possible: Default field access behavior may fail to verify that each selected tenant is authorized for the requesting user
  • Attack surface: Tenant membership or account update functionality exposed by the application
  • Required access: An authenticated user account with permission to submit relevant account or tenant-assignment changes
  • Trigger point: Creation or update of the user's tenant array field
  • Why exploitation is possible: Default field access behavior may fail to verify that each selected tenant is authorized for the requesting user

Why this happens

The underlying bug is an authorization failure mapped to CWE-862, Missing Authorization. The tenant array field's default create and update access behavior does not sufficiently enforce tenant-specific authorization before accepting membership changes. This creates an insecure pattern in which authenticated identity is treated as sufficient authority to modify authorization-related tenant assignments.

The underlying bug is an authorization failure mapped to CWE-862, Missing Authorization. The tenant array field's default create and update access behavior does not sufficiently enforce tenant-specific authorization before accepting membership changes. This creates an insecure pattern in which authenticated identity is treated as sufficient authority to modify authorization-related tenant assignments.

Potential impact

  • An attacker may gain access to data belonging to additional tenants
  • An attacker could perform actions within tenants they should not access
  • Cross-tenant data exposure or modification may occur
  • Tenant isolation and audit assumptions can be weakened
  • An attacker may gain access to data belonging to additional tenants
  • An attacker could perform actions within tenants they should not access
  • Cross-tenant data exposure or modification may occur
  • Tenant isolation and audit assumptions can be weakened

General mitigation guidance

Mitigation generally focuses on enforcing authorization at the tenant

membership field and reducing trust in client-supplied tenant identifiers.

Common defensive patterns include:

  • Defining explicit, deny-by-default authorization functions for tenant array creation and updates
  • Verifying every requested tenant against the authenticated user's permitted scope
  • Enforcing tenant isolation on reads, writes, and administrative operations
  • Preventing users from self-assigning privileged or unrelated tenant memberships
  • Applying least privilege to roles that can modify account and membership records
  • Revalidating authorization on the server rather than relying on client-side controls

Mitigation generally focuses on enforcing authorization at the tenant

membership field and reducing trust in client-supplied tenant identifiers.

Common defensive patterns include:

  • Defining explicit, deny-by-default authorization functions for tenant array creation and updates
  • Verifying every requested tenant against the authenticated user's permitted scope
  • Enforcing tenant isolation on reads, writes, and administrative operations
  • Preventing users from self-assigning privileged or unrelated tenant memberships
  • Applying least privilege to roles that can modify account and membership records
  • Revalidating authorization on the server rather than relying on client-side controls

How teams detect issues like this

Organizations can identify similar authorization issues through:

  • Static analysis and code review of access-control callbacks on tenant and membership fields
  • Tests that attempt cross-tenant membership changes with ordinary authenticated accounts
  • Review of policies for deny-by-default behavior and object-level authorization
  • Monitoring audit logs for unexpected tenant membership additions or changes
  • Automated security checks that flag writable authorization-related fields without explicit authorization logic

Organizations can identify similar authorization issues through:

  • Static analysis and code review of access-control callbacks on tenant and membership fields
  • Tests that attempt cross-tenant membership changes with ordinary authenticated accounts
  • Review of policies for deny-by-default behavior and object-level authorization
  • Monitoring audit logs for unexpected tenant membership additions or changes
  • Automated security checks that flag writable authorization-related fields without explicit authorization logic

Sources

SourceLink
github.comgithub.com/payloadcms/payload/commit/19b58692d20d3947f31124bf7a88ac14a5ebf02e
github.comgithub.com/payloadcms/payload/releases/tag/v3.90.0
github.comgithub.com/payloadcms/payload/security/advisories/GHSA-p96c-xwx8-3cqj

Frequently asked

questions

It may be exploitable through the application's authenticated account or API

workflows if those workflows allow users to modify tenant assignments.

The attacker generally needs a valid authenticated account and enough access

to invoke the affected account or tenant-membership update operation.

Use explicit server-side authorization functions for tenant membership creation

and updates, and verify every requested tenant against the user's allowed scope.

Treat tenant identifiers and membership changes as security-sensitive,

enforce object-level authorization on every request, use deny-by-default

policies, and test cross-tenant access boundaries.

It may be exploitable through the application's authenticated account or API

workflows if those workflows allow users to modify tenant assignments.

The attacker generally needs a valid authenticated account and enough access

to invoke the affected account or tenant-membership update operation.

Use explicit server-side authorization functions for tenant membership creation

and updates, and verify every requested tenant against the user's allowed scope.

Treat tenant identifiers and membership changes as security-sensitive,

enforce object-level authorization on every request, use deny-by-default

policies, and test cross-tenant access boundaries.

Find out what's already
exploitable in your codebase.