Skip to main content

Chainlit CVE-2026-120492

| EUVDEUVD-2026-115226 MEDIUM
Server-Side Request Forgery (SSRF) (CWE-918)
2026-11-02 VulnCheck GHSA-xhx7-9vjr-p2h8
6.3
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Reach /mcp endpoint unauthenticated
  2. Delivery
    Craft MCP url with '..;' path segment
  3. Exploit
    Pass validate_mcp_url semicolon gap
  4. Execution
    Bypass path-scoped allowed_urls grant
  5. Impact
    Server requests out-of-grant path on allowlisted origin

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V4 - API and Web Service URL allowlisting, SSRF prevention
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Credential Access

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires a Chainlit deployment with MCP enabled (features.mcp.enabled = true - disabled by default since v2.7.0) AND user-provided servers enabled (features.mcp.user_servers.enabled = true) with a non-empty allowed_urls allowlist that uses path-scoped entries. The bypass only succeeds against a target origin that strips semicolon path parameters, so hosts that preserve ';' are not reachable this way. Where no auth callback is registered, /mcp is reachable anonymously (no authentication required, per the CVSS PR:N). Limiting factors: all MCP user-server features are opt-in and deny-all by default, impact is confined to paths on origins already present in the operator's allowlist, and the SSRF is blind (no response returned), bounding this well below the unrestricted parent SSRF.

Impact

Signals point consistently to a low-to-moderate, conditional issue rather than an urgent one. The CVSS 4.0 vector (AV:N/AC:L/AT:P/PR:N/UI:N) scores 6.3 (Medium) and notably sets vulnerable-system impact to none (VC:N/VI:N/VA:N) with only subsequent-system confidentiality/integrity as Low (SC:L/SI:L) - meaning this is not the full SSRF but a narrower allowlist-scoping bypass. The vuln.today Decision label is 'monitor', which aligns with that limited impact. The AT:P (attack requirement present) metric is justified by the description: exploitation only works 'on origins that strip semicolon path parameters', an attacker-uncontrolled property of the targeted host, so this is not reliably exploitable everywhere. No EPSS score and no KEV listing were provided in the input, so there is no evidence of active or widespread exploitation. A PoC is present in the GHSA evidence, but it demonstrates the broader parent SSRF (CVE-2026-45019) against 2.11.0, not the semicolon '..;' path bypass that defines this CVE. Net: this is a hardening/bypass-class defect gated behind a non-default, opt-in feature, correctly prioritized as monitor rather than act_now.

Exploit ScenarioDerived

On a Chainlit 2.12.0 deployment with MCP and user-provided servers enabled, an unauthenticated attacker submits an MCP URL containing a '..;' segment to the /mcp endpoint. Because validate_mcp_url does not reject the semicolon, the URL passes the path-prefix check but, against an origin that strips semicolon path parameters, the server issues a request to a path outside the operator's allowlist grant. The SSRF is blind, so the response is not returned to the attacker.

Monitor Track and reassess. Why: Vendor states no customer action required.
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Nov 02, 2026

Server-side request forgery in Chainlit's MCP client path lets an unauthenticated remote user slip past path-scoped allowed_urls grants by embedding '..;' segments in the user-supplied MCP URL posted to /mcp, because validate_mcp_url does not reject the semicolon character; on origins that strip semicolon path parameters the request lands on a path outside the operator's grant. Exposure is narrow and opt-in: MCP must be enabled (features.mcp.enabled = true, off by default since v2.7.0), user-provided servers must be enabled with a non-empty allowed_urls allowlist, and the target origin must discard ';' parameters, so reach is confined to paths on hosts the operator already allowlisted, and the SSRF is blind. No public exploit code was identified at time of analysis and no EPSS or KEV signal is present; the priority label is monitor, consistent with a low-to-moderate, conditional issue rather than an urgent one.

RemediationAI

Apply the upstream fix in commit 0565fd0eccb915fce159929598b053ed79f6e0c9, which closes the semicolon canonicalization gap in validate_mcp_url; note that this is an upstream commit fix and a released patched version is not independently confirmed, so verify the tagged release before relying on a package upgrade. If you cannot patch immediately, the most complete mitigation stated by the maintainers is setting features.mcp.enabled = false in .chainlit/config.toml, which removes the /mcp outbound path entirely at the cost of disabling all MCP integrations (including developer-configured servers). Because the bypass requires user-provided servers, leaving features.mcp.user_servers.enabled = false (the deny-all default) or narrowing allowed_urls to full paths on origins that preserve ';' parameters reduces reach, with the trade-off that user-supplied MCP connections stop working and some legitimate grants may need to be re-scoped. Restricting outbound egress from the Chainlit host, such as firewall rules blocking internal address ranges and the cloud metadata endpoint at 169.254.169.254, bounds the destination set but does not prevent requests to allowlisted hosts, and registering an auth callback so /mcp requires an authenticated session removes the anonymous attack path without eliminating SSRF for authenticated users. Consult https://github.com/Chainlit/chainlit/security/advisories/GHSA-hvfh-5mj3-5f3j for the migration guidance before upgrading, since the 2.12.0 allowlist model introduced breaking configuration changes.

Affected VersionsENISA

Chainlit 2.12.0

Affected Packages

pypi chainlit fix: 2.12.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in pypi

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Chainlit exposes a POST /mcp endpoint that accepts a caller-supplied url and headers for the sse and streamable-http MCP transports, and hands them to the MCP SDK's sse_client()/streamablehttp_client() to make outbound requests from the server. The allowlist design shipped in 2.12.0 is implemented by validate_mcp_url (backend/chainlit/mcp.py, lines 90-177, with related handling at lines 199-208), which matches scheme/host/port and a path prefix against the operator's allowed_urls entries, strips a set of restricted headers, disables redirect following, and re-checks each transport request against the connection grant. This is a CWE-918 server-side request forgery: the validator's canonicalization is incomplete because it does not reject the semicolon character, so a URL whose path contains '..;' is accepted as within the approved path prefix. Whether the traversal actually materializes depends on the destination origin's path handling - servers that strip semicolon path parameters re-interpret the segment as a parent-directory traversal and route the request elsewhere on that same origin; origins that preserve ';' are not reachable this way. The result is a blind SSRF: the response is consumed internally by the MCP client and never returned to the attacker, so the impact is limited to the ability to issue requests, potentially state-changing ones, to other paths on already-trusted hosts. The trigger mechanics beyond the semicolon canonicalization gap are not described in the available sources.

Know when Chainlit gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (VulnCheck) PRIMARY 6.3 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N
vuln.today AI 5.4 MEDIUM

Unauthenticated network-reachable /mcp gives AV:N/PR:N/UI:N, but the bypass depends on the target origin stripping semicolon params (AC:H); the SSRF crosses scope (S:C) with only limited reachable-path confidentiality/integrity impact.

3.1 AV:N/AC:H/PR:N/UI:N/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
Low
Subsequent system: Integrity
Low
Subsequent system: Availability
None

DescriptionCVE.org

Chainlit 2.12.0 contains a server-side request forgery vulnerability that allows unauthenticated attackers to bypass path-scoped MCP allowed_urls entries because validate_mcp_url does not reject the semicolon character. Attackers can submit MCP URLs with '..;' segments to the /mcp endpoint, causing requests to paths outside the operator's grant on origins that strip semicolon path parameters.

Threat Intelligence Overview

EPSS Score
0.2%
Top 87% exploitable
Prevalence
Low
niche LLM-app UI framework, limited production deployment footprint
Data Quality
4 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
Vendor states no customer action required
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact· derived
Medium

Priority Score

32
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +32
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Server-Side Request Forgery exploits applications that fetch remote resources based on user-supplied URLs.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy