An attacker who obtains a user's password and a single MFA recovery code can reuse that recovery code an unlimited number of times by sending concurrent login requests. This defeats the single-use design of recovery codes. The attack requires the user's password, a valid recovery code, and the ability to send concurrent requests within milliseconds.
The login handler now uses optimistic locking when updating auth data that contains consumed single-use tokens. If a concurrent request has already modified the recovery array, the update fails and the login is rejected.
There are no known workarounds.
{
"nvd_published_at": "2026-03-24T19:16:55Z",
"github_reviewed_at": "2026-03-24T19:48:24Z",
"cwe_ids": [
"CWE-367"
],
"severity": "LOW",
"github_reviewed": true
}