製品・ソフトウェアに関する情報
strapiにおける過度な認証試行の不適切な制限に関する脆弱性
Title strapiにおける過度な認証試行の不適切な制限に関する脆弱性
Summary

Strapiはオープンソースのヘッドレスコンテンツ管理システムです。バージョン5.45.0以前のStrapiでは、users-permissionsプラグインのレート制限ミドルウェアがレート制限キーの一部として`ctx.request.body.email`を使用していました。これは`email`フィールドを含まないルート(`/auth/local`、`/auth/reset-password`、`/auth/change-password`など)においても同様でした。認証されていない攻撃者はリクエストボディに任意の`email`値を含めることでルートごとに新しいレート制限キーを取得でき、これによりこれらのルートでのIPごとのスロットリングを効果的に回避できました。その結果、大量の認証情報ブルートフォース攻撃、パスワードリセットコードのブルートフォース攻撃、認証情報詰め込み攻撃が可能となりました。レート制限キーは`${userIdentifier}:${requestPath}:${ctx.request.ip}`の形式で構築されており、`userIdentifier = ctx.request.body.email`でした。メールを識別子として正しく使用するルート(例:`/auth/forgot-password`、`/auth/local/register`)ではこのスコープは適切でしたが、異なる識別子を使用するルート(ログイン時は`identifier`、パスワードリセット時は`code`、パスワード変更時は`currentPassword`)においてはメールフィールドがルートの契約に含まれていなかったにもかかわらず、ミドルウェアがキーに取り込んでいたため、呼び出し元は値を回転させることで毎回ユニークなキーを取得できました。バージョン5.45.0の修正ではメールフィールドを合法的にキーに含むルートの許可リストを維持し、それ以外のミドルウェアが設置されたすべてのルートではそのキー要素を除外しています。OAuthコールバックのパス(`/connect/*`)は識別子なしとして扱われます。許可リスト外のルートでは、ミドルウェアは固定の識別子なしキーにフォールバックし、リクエストボディが攻撃者に制御されていてもIPごとのスロットリングが効果的に機能し続けることを保証します。

Possible impacts 当該ソフトウェアが扱う情報について、外部への漏えいは発生しません。 また、当該ソフトウェアが扱う情報について、書き換えは発生しません。 さらに、当該ソフトウェアの一部が停止する可能性があります。 そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。 
Solution

正式な対策が公開されています。ベンダ情報を参照して適切な対策を実施してください。

Publication Date May 14, 2026, midnight
Registration Date May 18, 2026, 12:08 p.m.
Last Update May 18, 2026, 12:08 p.m.
CVSS3.0 : 警告
Score 5.3
Vector CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
Affected System
strapi
strapi 5.45.0 未満
CVE (情報セキュリティ 共通脆弱性識別子)
CWE (共通脆弱性タイプ一覧)
ベンダー情報
その他
Change Log
No Changed Details Date of change
1 [2026年05月18日]
  掲載
May 18, 2026, 12:08 p.m.

NVD Vulnerability Information
CVE-2025-64526
Summary

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.

Publication Date May 15, 2026, 4:16 a.m.
Registration Date May 17, 2026, 4:09 a.m.
Last Update May 16, 2026, 12:30 p.m.
Affected software configurations
Configuration1 or higher or less more than less than
cpe:2.3:a:strapi:strapi:*:*:*:*:*:node.js:*:* 5.45.0
Related information, measures and tools
Common Vulnerabilities List