CVE-2026-101041: Vulnerability-Lookup - Race Condition in Account Recovery Token Consumption Allows Password Takeover

Published Sep 27, 2026
·
Updated

The account recovery (password reset) functionality in the vulnerability-lookup web application contains a time-of-check-to-time-of-use (TOCTOU) race condition in the consumption of single-use recovery tokens. The original implementation verified the token nonce against the stored digest and then consumed (cleared) it in separate database operations. Two concurrent HTTP requests presenting the same valid recovery token could both pass the verification check before either transaction committed, allowing both to set their own password on the target account. The last transaction to commit overwrites the first, enabling an attacker who possesses a valid recovery token to replace the legitimate user's password with one of their choosing.

A secondary defect in the same endpoint (confirmaccount) allowed a valid recovery link to be used to set an empty or trivially short password (e.g., three characters). The view handler performed only a manual equality comparison between the two password fields and never invoked the form's validation logic, bypassing the intended minimum-length and complexity constraints.

The affected component is the user account recovery endpoint (/user/confirmaccount/<token>) and the associated token verification and consumption logic in the User model (website/models/user.py) and the view layer (website/web/views/user.py).

Affected Software

1 affected component
Vulnerability-Lookup Vulnerability-Lookup

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Remove

    Remove dead consume_account_token() method from your environment.

    Remove the dead consume_account_token() method to eliminate the non-atomic token-consumption path.

  2. Compensating control

    Replace the non-atomic token check-then-consume flow with a single conditional UPDATE (compare-and-set) that atomically verifies the stored SHA-256 nonce digest, updates the password hash, sets is_confirmed, and clears the token.

  3. Compensating control

    In the account recovery view handler, call form.validate() before processing the password change so the form's minimum-length, complexity, and password-equality validators are enforced.

Event History

Sep 27, 2026
CVE Published
via MITRE·02:47 PM
Data Sourced
via MITRE·02:47 PM
RemedyDescriptionWeakness
Data Sourced
via NVD·03:16 PM
DescriptionSeverityWeakness

Frequently Asked Questions

1

What must an attacker have to take over an account?

The attacker must possess a valid account-recovery token for the target account. They must send concurrent requests to the /user/confirm_account endpoint using that token; no prior account privileges or user interaction are required.

2

What makes the race condition exploitable?

The recovery token was verified and cleared in separate database operations. Two requests using the same valid token could both pass verification before either request committed, and the password from the last committed transaction would become the account password.

3

Is password policy enforcement bypassed during recovery?

Yes. The affected handler compared the two submitted password fields but did not invoke form validation, allowing an empty or trivially short password, such as a three-character password, when using a valid recovery link.

4

How can administrators identify potentially affected activity?

Review account-recovery activity for concurrent requests to /user/confirm_account using the same recovery token, particularly where password changes occurred in rapid succession. The provided data does not identify a specific logging field or audit record for detecting this.

5

What fixes are referenced?

Two upstream commits are referenced: 5462bab62d76df852619e01eb67da36c023c8c40 and ad6f22882975516adf193a1a920aaa54025c71d4. The provided data does not state affected or fixed release versions.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203