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.
Published: 2026-08-10
Score: 5.9 Medium
EPSS: n/a
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

AnythingLLM’s account‑recovery mechanism allows an unauthenticated attacker to submit the same recovery code twice after whitespace normalization. Because the code list is deduplicated before trimming, the two submissions are considered distinct and each can match the same stored hash, enabling the attacker to obtain a password‑reset token. With the token, the attacker can set a new password via the reset endpoint and gain full control of the target account, including privileged administrator accounts. The flaw falls under CWE‑180 and CWE‑287, reflecting improper handling of user input and authorization bypass.

Affected Systems

The impact is limited to Mintplex‑Labs AnythingLLM versions 1.0.0 through 1.15.0, where the vulnerable recovery code logic was deployed. Only installations that expose the unauthenticated /api/system/recover‑account endpoint are vulnerable; protected or internal deployments that block unauthenticated access are not affected.

Risk and Exploitability

The CVSS score of 5.9 indicates moderate severity; the EPSS value is unknown and the vulnerability is not listed in CISA KEV, suggesting it is not currently being exploited in the wild. However, the attack vector is straightforward: a single username and one valid recovery code, which may be disclosed via phishing or leaked credentials, suffice to obtain a reset token and take over an account. Because the vulnerability requires only HTTP POST requests and no privileged host access, it remains accessible to any external actor once the target is identified.

Generated by OpenCVE AI on August 10, 2026 at 23:36 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade AnythingLLM to version 1.16.0 or later, where the recovery‑code logic has been fixed to trim input before deduplication and to consume each code only once.
  • If upgrading immediately is not possible, apply the patch commit 61766d06b77b903f66dc4afd8dffb3a39012db14 manually to correct the whitespace handling and enforce distinct code consumption.
  • For deployments still on affected versions, temporarily disable the unauthenticated /api/system/recover‑account endpoint or restrict it to a whitelist of trusted IP addresses, and monitor for any reset‑token requests that could indicate exploitation.

Generated by OpenCVE AI on August 10, 2026 at 23:36 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Mon, 10 Aug 2026 22:00:00 +0000

Type Values Removed Values Added
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.
Title AnythingLLM: Password recovery accepts one recovery code twice after whitespace normalization
Weaknesses CWE-180
CWE-287
References
Metrics cvssV3_1

{'score': 5.9, 'vector': 'CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N'}


Subscriptions

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-08-10T21:35:33.872Z

Reserved: 2026-08-10T17:57:26.144Z

Link: CVE-2026-72917

cve-icon Vulnrichment

No data.

cve-icon NVD

No data.

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-10T23:45:04Z

Weaknesses
  • CWE-180

    Incorrect Behavior Order: Validate Before Canonicalize

  • CWE-287

    Improper Authentication