Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain target credentials via phishing or credential stuffing
-
DeliveryObserve victim submit valid TOTP code during login
-
ExploitReplay observed code within drift window
-
ExecutionAuthenticate as victim bypassing second factor
-
ImpactAccess application resources under victim identity
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Replay attack prevention
|
| Exploitation Conditions | Two prerequisites must be satisfied: the attacker must already possess the target account's username and password (the first authentication factor), and must observe or intercept a valid TOTP code submitted during an active authentication session. The Rodauth otp feature must be enabled in the application configuration. The usable replay window equals the configured otp_drift value on each side of the code's generation timestamp. Remote unauthenticated attackers who do not hold prior credentials cannot exploit this vulnerability; exploitation is further bounded by the narrow time window and the need for real-time code observation. |
| Impact | The CVSS 4.0 score of 5.1 with PR:H reflects that exploitation demands the attacker already possess the target account password and then observe or intercept a live TOTP code - preconditions that substantially limit opportunistic mass exploitation and make this a targeted-threat concern rather than a commodity risk. No EPSS score was included in the source data, preventing quantitative probability comparison. The CVE is absent from CISA KEV, and no standalone public exploit tool is independently confirmed, though the patch commit's regression test demonstrates the exact attack sequence step by step. Impact is bounded to VC:L and VI:L - account-level access, not system-wide compromise - which aligns with the moderate CVSS score. The practical exploitation window equals the configured otp_drift duration; default or larger drift values extend that window meaningfully. Applications that deploy TOTP specifically to protect high-value accounts should treat this as a priority fix since it directly nullifies the security guarantee of the second factor. |
| Exploit ScenarioDerived | An attacker who has obtained a victim's username and password via phishing or credential stuffing monitors the victim completing a TOTP login - for example through a transparent TLS interception proxy or by physical observation. Within the configured drift window after the code was first used, the attacker submits the same code to establish a parallel authenticated session. The patch commit's regression test with a 90-second drift window demonstrates this exact sequence successfully against unpatched versions. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 29, 2026
TOTP code replay in Rodauth before 2.47.0 allows an attacker who has already obtained a victim's credentials and observed a valid one-time password to reuse that code within the configured drift window, bypassing the second authentication factor. The otp feature lacked any mechanism to record when a code was last accepted, so a single 30-second TOTP token could authenticate multiple distinct sessions during the drift period. No active exploitation is confirmed in CISA KEV, but the patch commit includes a working exploit reproduction in the regression test suite, and the attack mechanic is mechanically straightforward for any adversary who holds prior credential access.
RemediationAI
Upgrade to Rodauth 2.47.0 or later, which incorporates commit 3bfd0a11bae70935b1944e71dbe787dd0c3a62ad adding the :after=>otp_last_use argument to ROTP's verify call. The vendor advisory at https://github.com/jeremyevans/rodauth/security/advisories/GHSA-hhvg-6qmv-58vc confirms the fix version. If immediate upgrade is not feasible, setting otp_drift to zero eliminates the replay window at the cost of rejecting codes from users with significant clock skew; this trades usability for security. Restricting the application to network perimeters that prevent man-in-the-middle observation of TOTP codes reduces attacker opportunity but does not remediate the missing replay prevention. Neither workaround addresses the root cause and both should be treated as temporary.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Rodauth is a Ruby authentication framework for Rack-based applications, implementing RFC 6238 TOTP through the ROTP gem. TOTP tokens are generated per 30-second time steps; a configurable drift window (the regression test uses 90 seconds) accommodates client-server clock skew by accepting codes slightly before or after the current window. CWE-294 (Authentication Bypass by Capture-replay) identifies the root cause: Rodauth called ROTP's verify method without supplying the :after parameter, which instructs ROTP to reject any code whose generation timestamp falls at or before that of the previously accepted token. CPE cpe:2.3:a:jeremyevans:rodauth:*:*:*:*:*:*:*:* covers all versions prior to 2.47.0. Commit 3bfd0a11bae70935b1944e71dbe787dd0c3a62ad adds :after=>otp_last_use to both the drift-aware (verify_with_drift) and standard verify paths, ensuring prior codes are invalidated even while still within their TOTP validity window.
Know when Rodauth gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
Network vector; AC:H because exploitation requires prior credential possession and real-time observation of a live TOTP code; PR:N as the attacker holds no privileges on the system prior to the attack.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Rodauth before 2.47.0 contains a time-based one-time password reuse vulnerability in the otp feature that fails to track the last accepted code timestamp. Attackers who observe a valid TOTP code can replay it during the drift window to bypass the second authentication factor.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Authentication bypass in Rodauth (the Ruby authentication framework by Jeremy Evans, jeremyevans:rodauth) before 2.46.0
JWT access token indefinite renewal in Rodauth before 2.47.0 allows an attacker who possesses a valid access token to by
Open redirect in Rodauth before 2.47.0 enables post-authentication phishing by failing to reject protocol-relative retur
CSRF protection bypass in Rodauth before 2.47.0 allows remote attackers to force victims into authenticated sessions und
EUVD-2026-68127
GHSA-frwg-xgr9-44pg
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB