CVE-2026-21484
Homebrew vulnerability analysis and mitigation

Overview

CVE-2026-21484 is a username enumeration vulnerability in AnythingLLM, an open-source application that converts content into LLM-usable context. The password recovery endpoint (/api/system/recover-account) returns subtly different error messages depending on whether a submitted username exists in the system, allowing unauthenticated attackers to enumerate valid usernames. All versions prior to the fix introduced in commit e287fab56089cf8fcea9ba579a3ecdeca0daa313 (corresponding to version 1.10.0) are affected. The vulnerability was published on January 3, 2026, and carries a CVSS v3.1 base score of 5.3 (Medium) (GitHub Advisory, Feedly).

Technical details

The root cause is classified as CWE-203 (Observable Discrepancy) and CWE-204 (Observable Response Discrepancy). The recoverAccount function in server/utils/PasswordRecovery/index.js returned "Invalid recovery codes" (without a trailing period) when a user existed but provided invalid codes, and "Invalid recovery codes." (with a trailing period) when the username did not exist — a one-character difference that leaks user existence. The fix (commit e287fab) standardizes both code paths to return the same error string with a trailing period, eliminating the discrepancy. No authentication or special privileges are required to exploit this endpoint, and the attack is executable remotely over the network with low complexity (GitHub Advisory, Patch Commit).

Impact

Successful exploitation allows an unauthenticated attacker to determine which usernames are registered in an AnythingLLM instance by analyzing the subtle difference in error message responses. This information can be leveraged to facilitate targeted credential stuffing, brute-force attacks, phishing campaigns, or account takeover attempts against identified users. There is no direct integrity or availability impact; the confidentiality impact is limited to user account existence disclosure (GitHub Advisory).

Exploitability

A proof-of-concept exploit is publicly documented in the GitHub Security Advisory, consisting of simple curl commands targeting the /api/system/recover-account endpoint. There is no evidence of active in-the-wild exploitation at this time. The EPSS score is approximately 0.028% (0.000280), indicating a low probability of exploitation in the near term. The vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. A Nuclei detection template was added to the ProjectDiscovery nuclei-templates repository, further lowering the barrier for automated scanning (GitHub Advisory, Feedly).

Exploitation steps

  1. Reconnaissance: Identify internet-facing AnythingLLM instances (e.g., via Shodan or Censys searching for the default port 3001 or known AnythingLLM UI signatures).
  2. Prepare username list: Compile a list of candidate usernames to test (e.g., admin, user, root, common names).
  3. Send enumeration requests: For each candidate username, send a POST request to the password recovery endpoint with an intentionally invalid recovery code:
    curl -X POST "http://<target>:3001/api/system/recover-account" \
      -H "Content-Type: application/json" \
      -d '{"username":"admin","recoveryCodes":["xxx"]}'
  4. Analyze responses: Compare the error message in the JSON response body:
    • "Invalid recovery codes" (no trailing period) → username exists
    • "Invalid recovery codes." (with trailing period) → username does not exist
  5. Build valid username list: Record all usernames that return the "exists" variant for use in subsequent credential attacks, phishing, or brute-force campaigns (GitHub Advisory).

Indicators of compromise

  • Network: High volume of POST requests to /api/system/recover-account from a single IP or rotating IP range, especially with varied username values and identical invalid recoveryCodes.
  • Logs: Application or web server access logs showing repeated hits to the /api/system/recover-account endpoint with different usernames in rapid succession; automated tooling may produce consistent User-Agent strings or request timing patterns.
  • Behavioral: Requests containing obviously invalid or placeholder recovery codes (e.g., ["xxx"], ["test"]) paired with systematic username variations suggest automated enumeration activity.

Mitigation and workarounds

Upgrade AnythingLLM to version 1.10.0 or later, which includes the fix introduced in commit e287fab56089cf8fcea9ba579a3ecdeca0daa313. The fix standardizes the error response from the password recovery endpoint so that both the "user exists" and "user does not exist" code paths return identical messages, eliminating the observable discrepancy. As an additional defense-in-depth measure, implement rate limiting on the /api/system/recover-account endpoint to reduce the feasibility of automated enumeration attacks even on unpatched instances (GitHub Advisory, Patch Commit).

Community reactions

The vulnerability was reported by security researcher DenizParlak and published by AnythingLLM maintainer timothycarambat via GitHub's security advisory process on January 2, 2026. The issue received coverage from automated vulnerability tracking services including INCIBE-CERT and ENISA's EUVD. A Nuclei detection template was subsequently contributed to ProjectDiscovery's nuclei-templates repository, indicating community interest in automated detection (GitHub Advisory).

Additional resources


SourceThis report was generated using AI

Related Homebrew vulnerabilities:

CVE ID

Severity

Score

Technologies

Component name

CISA KEV exploit

Has fix

Published date

CVE-2026-68968HIGH7.5
  • Homebrew logoHomebrew
  • airflow
NoYesAug 12, 2026
CVE-2026-68971MEDIUM6.5
  • Homebrew logoHomebrew
  • airflow
NoYesAug 12, 2026
CVE-2026-68970MEDIUM6.5
  • Homebrew logoHomebrew
  • airflow
NoYesAug 12, 2026
CVE-2026-68969MEDIUM6.5
  • Homebrew logoHomebrew
  • airflow
NoYesAug 12, 2026
CVE-2026-68076MEDIUM5.4
  • Homebrew logoHomebrew
  • airflow
NoYesAug 12, 2026

Free Vulnerability Assessment

Benchmark your Cloud Security Posture

Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.

Request assessment

Get a personalized demo

Ready to see Wiz in action?

"Best User Experience I have ever seen, provides full visibility to cloud workloads."
David EstlickCISO
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
Adam FletcherChief Security Officer
"We know that if Wiz identifies something as critical, it actually is."
Greg PoniatowskiHead of Threat and Vulnerability Management