Summary
Chainlist has SSRF via MCP SSE and streamable-http transports that allows unauthenticated internal network access
Impact
High. An unauthenticated attacker can force the Chainlit server to make HTTP requests to arbitrary internal or external services, with fully attacker-controlled headers.
Although this is a blind SSRF, the response body is never returned to the attacker, the vulnerable versions apply no allowlist to either the destination URL or the headers. Full control over both is enough to issue state-changing, authenticated requests to internal APIs: the PoC above is itself a POST carrying a forged Authorization header. Write operations against internal services do not require reading the response to have effect, so this goes beyond passive reconnaissance. The same primitive also enables internal service discovery, port scanning, and probing cloud metadata endpoints (e.g., AWS IMDSv1 at 169.254.169.254). Any Chainlit deployment with MCP enabled is affected.
Untrusted input controls the target URL of a server-initiated request, which may reach internal services not otherwise accessible from outside. Typical impact: access to internal metadata services, internal APIs, or cloud credentials.
CVE-2026-45019 has a CVSS score of 7.2 (High). The vector is network-reachable, no privileges required, and no user interaction. A CVSS score reflects the worst-case severity of the vulnerability, not your specific exposure. Whether this affects your application depends on whether the vulnerable code is present and reachable in your environment. A fixed version is available (2.12.0); upgrading removes the vulnerable code path.
Affected versions
Security releases
Kodem intelligence
Severity tells you how bad this could be in the worst case. It does not tell you whether you are exposed. Exploitability and impact are functions of runtime truth: whether the vulnerable code is present, reachable, and actually executes in your application. A vulnerable package can sit in your dependency tree and never run.
Kodem, an Intelligent Application Security platform, uses runtime intelligence to reveal which vulnerabilities actually execute in production, so teams prioritize the ones that genuinely matter. Kodem's runtime-powered SCA identifies whether this CVE is reachable in your applications.
Already deployed Kodem?
See it in your environmentNew to Kodem? Get a demo →Remediation advice
Chainlit 2.12.0 introduces an opt-in, allowlist-based model for user-provided SSE / streamable-http connections:
- User-provided MCP connections now require explicit opt-in via
features.mcp.user_servers.enabled = true, plus a non-emptyallowed_urlsallowlist. The default is deny-all, no outbound URL is permitted unless explicitly listed. - URLs are validated: http/https only, with scheme/host/port/path-prefix matching against the allowlist. Requests with
./..path segments, encoded separators (%2e,%2f,%5c), double-encoded sequences (%25), backslashes, or non-ASCII characters in the path are rejected. - Restricted headers are stripped from user-supplied headers before the request is sent:
Cookie,Host,Forwarded,X-Forwarded-*,X-Real-IP,Via,Proxy-Authorization,X-HTTP-Method-Override,X-Original-URL,X-Rewrite-URL, and hop-by-hop headers.Authorizationis deliberately still forwarded, for user-provided servers, passing a caller-supplied credential to the allowlisted target is the point of the feature, and the destination is now constrained byallowed_urls. - Named (developer-configured) server URLs and headers are no longer returned to the browser, on either the success or the error path, and
GET /project/settingsno longer disclosesallowed_urls.
During remediation the maintainers also identified and closed two ways an allowlist could otherwise be bypassed once introduced. Neither adds to the pre-fix impact described above, since the vulnerable versions had no allowlist to bypass in the first place, they are hardening measures for the new allowlist:
- HTTP redirects are no longer followed on MCP transports. The underlying SDK hardcoded
follow_redirects=True, so only the first hop of a request would ever have been checked against an allowlist. - Every outgoing transport request is now re-checked against the connection's grant, not just the initial URL. The MCP SSE protocol takes its POST target from the server's
endpointevent, and the SDK validates only scheme and host on that event, so an allowlisted server could otherwise redirect subsequent writes elsewhere on the same host.
A companion advisory (CVE-2026-45018) covers the corresponding fix for command injection via the stdio transport.
Frequently Asked Questions
- What is CVE-2026-45019? CVE-2026-45019 is a high-severity server-side request forgery (SSRF) vulnerability in chainlit (pip), affecting versions >= 2.4.0rc0, <= 2.11.1. It is fixed in 2.12.0. Untrusted input controls the target URL of a server-initiated request, which may reach internal services not otherwise accessible from outside.
- How severe is CVE-2026-45019? CVE-2026-45019 has a CVSS score of 7.2 (High). This score reflects the worst-case severity of the vulnerability, not your specific exposure. Whether it represents real risk in your environment depends on whether the vulnerable code is present and reachable.
- Which versions of chainlit are affected by CVE-2026-45019? chainlit (pip) versions >= 2.4.0rc0, <= 2.11.1 is affected.
- Is there a fix for CVE-2026-45019? Yes. CVE-2026-45019 is fixed in 2.12.0. Upgrade to this version or later.
- Is CVE-2026-45019 exploitable, and should I be worried? Whether CVE-2026-45019 is exploitable in your environment depends on whether the vulnerable code is present and reachable. A CVSS score is a worst-case rating; it does not account for your specific deployment, configuration, or usage patterns. Kodem, an Intelligent Application Security platform, uses runtime intelligence to show which vulnerabilities actually execute in production, so you can focus on the ones that represent real risk. Get a demo
- What actually determines whether CVE-2026-45019 is exploitable, and how bad it is? Exploitability and impact are not fixed properties of a CVE. They depend on runtime truth: whether the vulnerable code is present, reachable, and actually executes in your application. A high CVSS score on a dependency that never runs is not the same as real risk. Kodem, an Intelligent Application Security platform, uses runtime intelligence to reveal which vulnerabilities actually execute in production, so teams prioritize the ones that genuinely matter.
- How do I fix CVE-2026-45019? Upgrade
chainlitto 2.12.0 or later.