CVE-2025-64526

Strapi has a rate limit bypass on users-permissions plugin via attacker-controlled email keying

MEDIUM
5.3
CVSS Score
Published: May 14, 2026 at 06:32 PM UTC
Updated: October 14, 2026 at 01:10 PM UTC
2 products affected across 1 vendorStrapiPlugin Users Permissions

Using strapi by strapi?

Get instant alerts when new vulnerabilities affect strapi - before attackers find them.

Real-time alertsTrack your software stackFree plan available
Severity
MEDIUM5.3
Exploit prediction
EPSS 0.5%
SSVC
No known exploit

Description

Strapi is an open source headless content management system. In Strapi versions prior to 5.45.0, the rate-limit middleware in the users-permissions plugin derived its rate-limit key in part from `ctx.request.body.email`, including on routes whose body schema does not contain an `email` field (`/auth/local`, `/auth/reset-password`, `/auth/change-password`). An unauthenticated attacker could include an arbitrary `email` value in the request body to obtain a fresh rate-limit key per request, effectively bypassing per-IP throttling on those routes and enabling high-volume credential brute-force, password-reset code brute-force, and credential-stuffing attempts. The rate-limit key was constructed as `${userIdentifier}:${requestPath}:${ctx.request.ip}`, where `userIdentifier = ctx.request.body.email`. On routes that legitimately use email as their identifier (e.g. `/auth/forgot-password`, `/auth/local/register`), this scoping is correct. On routes that use a different identifier (`identifier` for login, `code` for password reset, `currentPassword` for password change), the email field was not part of the route contract, but the middleware still incorporated it into the key, allowing a caller to rotate the value and obtain a unique key on every request. The patch in version 5.45.0 maintains an allow-list of routes that legitimately key on the email field and excludes that key component on every other route the middleware is mounted on. OAuth callback paths (`/connect/*`) are treated identifier-less. On routes outside the allow-list, the middleware now falls back to a fixed identifier-less key, ensuring per-IP throttling remains effective even when the request body is attacker-controlled.

Affected

Our own answer: ranges merged, affected separated from platform-only, with confidence and review flags.

95%
v < 5.45.0
Affected range stops below 5.45.0, so it looks safe — our inference, not a vendor statement
v < 5.45.0
Affected range stops below 5.45.0, so it looks safe — our inference, not a vendor statement

Remediation

No guide yet

No remediation guidance has been written for this CVE yet. What the record does show:

References (4)

x_refsource_CONFIRMVendor Advisory
Source: cverecord
https://github.com/strapi/strapi/security/advisories/GHSA-7mqx-wwh4-f9fw
x_refsource_MISCIssue Tracking
Source: cverecord
https://github.com/strapi/strapi/pull/24818
x_refsource_MISCPatchProduct
Source: cverecord
https://github.com/strapi/strapi/releases/tag/v5.45.0

SSVC — Action Prioritization

SSVCNo known exploitAutomatableTotal impact

SSVC signals action urgency (what to patch first), separate from CVSS which measures severity.

CVSS

Attack Vector
NETWORK
Complexity
LOW
Privileges
NONE
User Interaction
NONE
Scope
UNCHANGED
Confidentiality
NONE
Integrity
NONE
Availability
LOW
Vector?

Quick Info

StatusANALYZED
CWE
CWE-307

Get alerted

Stop reading CVE feeds looking for your own stack

Track the products you run and VulnTracker tells you when a new CVE affects them — with what is known about fixing it, and nothing about the rest.

Free plan, no card