Browse / CVEs / CVE-2026-21484
CVE-2026-21484· mintplex-labs / anything-llm· CWE-203, CWE-204
AnythingLLM - Username Enumeration via Password Recovery
AnythingLLM is an application that turns pieces of content into context that any LLM can use as references during chatting. Prior to commit e287fab56089cf8fcea9ba579a3ecdeca0daa313, the password recovery endpoint returns different error messages depending on whether a username exists, so enabling username enumeration. Commit e287fab56089cf8fcea9ba579a3ecdeca0daa313 fixes this issue.
Impact
Attackers can enumerate valid usernames, aiding further targeted attacks or social engineering.
Fix
Update to the version including commit e287fab56089cf8fcea9ba579a3ecdeca0daa313 or later.
How to confirm it
Send: POST /api/system/recover-account
Positive when: status_code == 400 and contains_all(body, "Invalid recovery codes","success")Run it with nuclei: nuclei -id CVE-2026-21484 -u <target>
The full check
id: CVE-2026-21484
info:
name: AnythingLLM - Username Enumeration via Password Recovery
author: DhiyaneshDk
severity: medium
description: |
AnythingLLM is an application that turns pieces of content into context that any LLM can use as references during chatting. Prior to commit e287fab56089cf8fcea9ba579a3ecdeca0daa313, the password recovery endpoint returns different error messages depending on whether a username exists, so enabling username enumeration. Commit e287fab56089cf8fcea9ba579a3ecdeca0daa313 fixes this issue.
impact: |
Attackers can enumerate valid usernames, aiding further targeted attacks or social engineering.
remediation: Update to the version including commit e287fab56089cf8fcea9ba579a3ecdeca0daa313 or later.
reference:
- https://github.com/Mintplex-Labs/anything-llm/security/advisories/GHSA-47vr-w3vm-69ch
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
cvss-score: 5.3
cve-id: CVE-2026-21484
epss-score: 0.00761
epss-percentile: 0.55653
cwe-id: CWE-203,CWE-204
metadata:
verified: true
max-request: 2
vendor: mintplex-labs
product: anything-llm
shodan-query: http.favicon.hash:-1279687529
tags: cve,cve2026,anythingllm,user-enum
variables:
rc1: "{{rand_text_alphanumeric(8)}}-{{rand_text_alphanumeric(4)}}-{{rand_text_alphanumeric(4)}}-{{rand_text_alphanumeric(4)}}-{{rand_text_alphanumeric(12)}}"
rc2: "{{rand_text_alphanumeric(8)}}-{{rand_text_alphanumeric(4)}}-{{rand_text_alphanumeric(4)}}-{{rand_text_alphanumeric(4)}}-{{rand_text_alphanumeric(12)}}"
rc3: "{{rand_text_alphanumeric(8)}}-{{rand_text_alphanumeric(4)}}-{{rand_text_alphanumeric(4)}}-{{rand_text_alphanumeric(4)}}-{{rand_text_alphanumeric(12)}}"
rc4: "{{rand_text_alphanumeric(8)}}-{{rand_text_alphanumeric(4)}}-{{rand_text_alphanumeric(4)}}-{{rand_text_alphanumeric(4)}}-{{rand_text_alphanumeric(12)}}"
http:
- raw:
- |
POST /api/system/recover-account HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
{"username":"{{randstr}}","recoveryCodes":["{{rc3}}","{{rc4}}"]}
matchers:
- type: dsl
dsl:
- 'status_code == 400'
- 'contains_all(body, "Invalid recovery codes","success")'
condition: andReferences
Use this check only on systems you are authorised to test. Where the data comes from