Sceawere
Vulnerability Detail
CVE-2026-72917UPDATED Verified Sceawere Triage Sources: NVD / CISA KEV
AnythingLLM Account Recovery Flaw
Vulnerability Metadata
- Severity
- Medium
- Score / CVSS
- 5.9
- Creation Date
- 5h ago
- Vendor
- Mintplex-Labs
- Product
- anything-llm
- Attack Type
- CWE-180: Incorrect Behavior Order: Validate Before Canonicalize
- Vector String
- CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N
- Attack Complexity
- HIGH
Narrative and Response
Description
AnythingLLM is an application that turns pieces of content into context that any LLM can use as references during chatting. From 1.0.0 to 1.15.0, AnythingLLM's unauthenticated account-recovery flow in server/utils/PasswordRecovery/index.js uses recoverAccount() to deduplicate the raw recoveryCodes values before trimming them, so one valid code submitted twice with different surrounding whitespace can satisfy the two-code check. Each normalized value can also match the same stored hash instead of consuming a distinct hash. An attacker who knows the target username and one recovery code can call POST /api/system/recover-account in multi-user mode, receive a password-reset token, and use POST /api/system/reset-password to take over the account, including an administrator account.
Executive Summary
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Technical Details
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Mitigations
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
References
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
Additional Metadata
{
"score": "5.9",
"pubDate": "2026-08-10T22:17:10.660Z",
"pubdate": "2026-08-10T22:17:10.660Z",
"executiveSummary": "AnythingLLM versions 1.0.0 through 1.15.0 suffer from an unauthenticated account-recovery logic flaw in the password recovery mechanism. The vulnerability allows an attacker to bypass multi-code validation checks during the account recovery process.\nThe primary impact of this vulnerability is complete account takeover, including administrative accounts, leading to unauthorized access to sensitive LLM context and system controls.\nThe affected product is AnythingLLM, specifically the unauthenticated account-recovery flow located in server/utils/PasswordRecovery/index.js.\nThe risk implications are severe, as exploitation enables full administrative compromise of the application in multi-user mode without prior authentication.\nAn attacker must possess knowledge of the target username and a single valid recovery code to execute the attack successfully.\nExploitation requirements include network access to the POST /api/system/recover-account and POST /api/system/reset-password endpoints in multi-user mode, alongside the aforementioned target username and recovery code.",
"technicalDetails": "The root cause of the vulnerability resides in the unauthenticated account-recovery flow implemented via recoverAccount() within server/utils/PasswordRecovery/index.js.\nDuring the recovery process, the application deduplicates the raw recoveryCodes values prior to executing string trimming operations.\nThis improper input normalization logic allows a single valid recovery code, when submitted twice with varying surrounding whitespace, to successfully satisfy the application's multi-code verification requirement.\nFurthermore, each normalized value matches the exact same stored cryptographic hash instead of enforcing the consumption of distinct, unique hashes for each required verification step.\nThe attack flow begins when an attacker, operating in multi-user mode and possessing a target username and a single valid recovery code, issues a crafted HTTP request to POST /api/system/recover-account.\nBy submitting the single valid recovery code twice with differing whitespace padding, the flawed deduplication and trimming routines validate the input successfully.\nUpon successful validation, the endpoint returns a valid password-reset token to the unauthenticated caller.\nThe attacker then utilizes the acquired password-reset token in a subsequent HTTP POST request to POST /api/system/reset-password.\nThis sequence allows the attacker to finalize the password reset process, completely overriding the target user's credentials and achieving full account takeover.\nThe vulnerable component is exposed over the network via standard HTTP/HTTPS protocols, requiring no prior authentication or user privileges beyond possessing the aforementioned username and single recovery code."
}