
PayloadCMS 3.84.1 - Authenticated account lockout bypass through default unlock access
5.3
Medium
Discovered by
Offensive Team, Fluid Attacks
Summary
Full name
PayloadCMS 3.84.1 - Authenticated account lockout bypass through default unlock access
Code name
State
Public
Release date
Affected product
PayloadCMS
Vendor
PayloadCMS
Affected version(s)
3.84.1
Package manager
npm
Vulnerability name
Authentication mechanism absence or evasion
Vulnerability type
Remotely exploitable
Yes
CVSS v4.0 vector string
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
CVSS v4.0 base score
5.3
Exploit available
Yes
CVE ID(s)
Description
An Improper Authorization vulnerability exists in PayloadCMS version 3.84.1 due to insufficient access control on the account unlock operation. When an authentication-enabled collection does not explicitly override the access.unlock policy, the POST /api/users/unlock endpoint permits any authenticated user to unlock arbitrary accounts by supplying the target user's email address.
This behavior bypasses the built-in account lockout protections enforced by maxLoginAttempts and lockTime. A low-privileged authenticated attacker can repeatedly reset a target account's lockout state, effectively defeating the application's brute-force protection mechanism.
Vulnerability
Case A: account lockout bypass through default access.unlock
Source:
Authenticated attacker-controlled request to
POST /api/users/unlock.Request body supplies the target user's
emailorusername.
Access control:
packages/payload/src/collections/config/defaults.ts:10-15setsunlock: defaultAccess.packages/payload/src/collections/config/defaults.ts:57-65preserves that default unless the collection explicitly overridesaccess.unlock.packages/payload/src/auth/defaultAccess.ts:3returnsBoolean(user), so any authenticated user passes.
Sink:
packages/payload/src/auth/operations/unlock.ts:76-81evaluatescollectionConfig.access.unlock.If the access result is
true, no ownership, role, or target-user constraint is added.packages/payload/src/auth/operations/unlock.ts:88-114then looks up the user solely by the supplied email or username.packages/payload/src/auth/operations/unlock.ts:118-124callsresetLoginAttempts.packages/payload/src/auth/strategies/local/resetLoginAttempts.ts:24-30clearslockUntiland setsloginAttemptsto0.
Impact:
An authenticated attacker can unlock another account.
The attacker can reset failed-login counters and continue guessing passwords beyond the configured lockout limit.
Administrator accounts are affected when their auth collection inherits the default unlock access policy.
Relevant code in tag v3.84.1:
packages/payload/src/collections/config/defaults.ts:10-15packages/payload/src/collections/config/defaults.ts:57-65packages/payload/src/collections/config/defaults.ts:120-128packages/payload/src/auth/defaultAccess.ts:3packages/payload/src/auth/endpoints/unlock.ts:9-25packages/payload/src/auth/operations/unlock.ts:76-124packages/payload/src/auth/strategies/local/resetLoginAttempts.ts:24-30
Default templates inherit the vulnerable behavior:
templates/blank/src/collections/Users.ts:3-13enablesauth: trueand does not defineaccess.unlock.templates/with-vercel-website/src/collections/Users/index.ts:7-13defines other access handlers but omitsunlock.
PoC
REST PoC
Prerequisites:
PayloadCMS
3.84.1.An auth-enabled
userscollection withmaxLoginAttemptsenabled. This is enabled by default withmaxLoginAttempts: 5andlockTime: 600000.The collection does not override
access.unlock.The attacker has a valid, authenticated account.
Log in as a low-privileged user and store the token:
Lock the target account by sending failed login attempts:
Verify that the target account is locked:
Expected response includes an error equivalent to:
Unlock the target account using the attacker's token:
Expected result:
Repeat failed login attempts and unlock calls to continue guessing the administrator password without waiting for
lockTime.
Evidence of Exploitation
Video of exploitation:
Static evidence:

Our security policy
We have reserved the ID CVE-2026-11779 to refer to this issue from now on.
System Information
PayloadCMS
Version:
3.84.1Operating System: Any
References
GitHub Repository: https://github.com/payloadcms/payload
Mitigation
There is currently no patch available for this vulnerability.
Credits
The vulnerability was discovered by Oscar Naveda from Fluid Attacks' Offensive Team.
Timeline
Vulnerability discovered
Vendor contacted
Public disclosure
Does your application use this vulnerable software?
During our free trial, our tools assess your application, identify vulnerabilities, and provide recommendations for their remediation.













