CVE-2026-66005: Jan: CORS misconfig exposes local LLM API to network
MEDIUM CISA: TRACK*Jan's local API server ships with a broken CORS trusted-host check: instead of enforcing the user-configured allowlist, it silently swaps in a wildcard that reflects any requesting origin while still allowing credentials, which defeats the browser's same-origin protections entirely. A CISO should care because this turns 'it only listens locally' into a false assumption — any attacker on the same network segment, or a malicious website using DNS rebinding, can drive a victim's browser to reach the unauthenticated OpenAI-compatible endpoint and run inference, enumerate loaded models, and invoke connected MCP tools, then read the cross-origin responses. There's no CISA KEV listing, no EPSS score, and no public exploit or Nuclei template yet, so this isn't under active mass exploitation, but the bug requires no credentials and only one instance of user interaction (visiting a page while Jan is running) to trigger — a low bar for a targeted attack against a developer or power user running local AI tooling. Upgrade to the version built from commit 3e1c1e7 (post-0.8.4) immediately; until then, don't run Jan's API server while browsing untrusted sites, bind it to loopback only and firewall off LAN access, and audit any MCP tool logs for unexpected cross-origin invocations.
What is the risk?
Medium overall (CVSS 6.3) but the exploitability profile is more concerning than the base score suggests for AI-specific deployments: attack vector is network, complexity is low, and no privileges are required — the only gate is user interaction (visiting an attacker page or being subject to DNS rebinding) while Jan is running. There is no evidence of active exploitation (not in CISA KEV, no EPSS score published, no public exploit code, no Nuclei template), which keeps urgency at 'patch on next cycle' rather than 'patch now,' but the confidentiality/integrity/availability impact (each rated low individually) understates the practical risk when the exposed surface includes MCP tool invocation, since tools can have side effects (file access, network calls, code execution) well beyond simple data disclosure. Exposure is highest for developers and power users who run Jan as a persistent local service while also browsing the open internet.
How does the attack unfold?
How severe is it?
What is the attack surface?
What should I do?
1 step-
Patch: upgrade Jan to the release containing commit 3e1c1e7 (fixed after 0.8.4) — verify the fix via the vendor commit and PR #8506 before considering this closed. Workarounds if patching is delayed: bind Jan's API server to 127.0.0.1 only (avoid 0.0.0.0/LAN binding), block the API port at the host firewall from other network hosts, and avoid keeping Jan's server running unattended while browsing untrusted or unknown websites (mitigates DNS rebinding). Detection: monitor Jan's local API access logs for requests bearing unexpected Origin headers or originating from browser-like user agents outside your own tooling, and review MCP tool invocation logs for calls not initiated by your own client. Harden further by disabling or scoping down MCP tools with destructive or data-exfiltration capability when not actively needed.
What does CISA's SSVC say?
Source: CISA Vulnrichment (SSVC v2.0). Decision based on the CISA Coordinator decision tree.
How is it classified?
Which compliance frameworks are affected?
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-66005?
Jan's local API server ships with a broken CORS trusted-host check: instead of enforcing the user-configured allowlist, it silently swaps in a wildcard that reflects any requesting origin while still allowing credentials, which defeats the browser's same-origin protections entirely. A CISO should care because this turns 'it only listens locally' into a false assumption — any attacker on the same network segment, or a malicious website using DNS rebinding, can drive a victim's browser to reach the unauthenticated OpenAI-compatible endpoint and run inference, enumerate loaded models, and invoke connected MCP tools, then read the cross-origin responses. There's no CISA KEV listing, no EPSS score, and no public exploit or Nuclei template yet, so this isn't under active mass exploitation, but the bug requires no credentials and only one instance of user interaction (visiting a page while Jan is running) to trigger — a low bar for a targeted attack against a developer or power user running local AI tooling. Upgrade to the version built from commit 3e1c1e7 (post-0.8.4) immediately; until then, don't run Jan's API server while browsing untrusted sites, bind it to loopback only and firewall off LAN access, and audit any MCP tool logs for unexpected cross-origin invocations.
Is CVE-2026-66005 actively exploited?
No confirmed active exploitation of CVE-2026-66005 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-66005?
Patch: upgrade Jan to the release containing commit 3e1c1e7 (fixed after 0.8.4) — verify the fix via the vendor commit and PR #8506 before considering this closed. Workarounds if patching is delayed: bind Jan's API server to 127.0.0.1 only (avoid 0.0.0.0/LAN binding), block the API port at the host firewall from other network hosts, and avoid keeping Jan's server running unattended while browsing untrusted or unknown websites (mitigates DNS rebinding). Detection: monitor Jan's local API access logs for requests bearing unexpected Origin headers or originating from browser-like user agents outside your own tooling, and review MCP tool invocation logs for calls not initiated by your own client. Harden further by disabling or scoping down MCP tools with destructive or data-exfiltration capability when not actively needed.
What systems are affected by CVE-2026-66005?
This vulnerability affects the following AI/ML architecture patterns: agent frameworks, model serving, local LLM inference.
What is the CVSS score for CVE-2026-66005?
CVE-2026-66005 has a CVSS v3.1 base score of 6.3 (MEDIUM). The EPSS exploitation probability is 0.20%.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0040 AI Model Inference API Access AML.T0049 Exploit Public-Facing Application AML.T0053 AI Agent Tool Invocation AML.T0086 Exfiltration via AI Agent Tool Invocation Compliance Controls Affected
What are the technical details?
Original Advisory
Jan through 0.8.4, fixed in commit 3e1c1e7, contains a CORS misconfiguration vulnerability in its local API server that allows network-adjacent attackers to bypass trusted host restrictions by exploiting the server's replacement of user-configured trusted hosts with a wildcard that reflects arbitrary origins with credentials. Attackers on the local network or using DNS rebinding can reach the unauthenticated OpenAI-compatible API to perform inference, enumerate models, invoke MCP tools, and read cross-origin responses.
Exploitation Scenario
A victim runs Jan locally with its API server active and several MCP tools connected (e.g., filesystem or web-fetch tools). The victim visits an attacker-controlled webpage, or resolves a domain the attacker controls via DNS rebinding so it appears to be same-origin. JavaScript on that page issues a cross-origin fetch to Jan's local API port; because Jan's CORS layer has replaced the trusted-host allowlist with a wildcard that reflects the request's Origin header while still permitting credentials, the browser allows the response to be read. The attacker's script then enumerates available models, submits inference requests, and invokes exposed MCP tools — for example, prompting a tool with filesystem access to read or exfiltrate local files, or a web-fetch tool to reach internal network resources — all while reading the JSON responses cross-origin, effectively turning the victim's browser into a remote control channel for their local AI agent.
Weaknesses (CWE)
CWE-183 Permissive List of Allowed Inputs
Primary
CWE-942 Permissive Cross-domain Security Policy with Untrusted Domains
Primary
CWE-183 Permissive List of Allowed Inputs CWE-942 Permissive Cross-domain Security Policy with Untrusted Domains CWE-183 — Permissive List of Allowed Inputs: The product implements a protection mechanism that relies on a list of inputs (or properties of inputs) that are explicitly allowed by policy because the inputs are assumed to be safe, but the list is too permissive - that is, it allows an input that is unsafe, leading to resultant weaknesses.
Source: MITRE CWE corpus.
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:L References
Timeline
Related Vulnerabilities
CVE-2023-3765 10.0 MLflow: path traversal allows arbitrary file read
Same attack type: Data Leakage CVE-2025-5120 10.0 smolagents: sandbox escape enables unauthenticated RCE
Same attack type: Data Leakage CVE-2025-2828 10.0 LangChain RequestsToolkit: SSRF exposes cloud metadata
Same attack type: Auth Bypass CVE-2025-53767 10.0 Azure OpenAI: SSRF EoP, no auth required (CVSS 10)
Same attack type: Auth Bypass CVE-2025-59528 10.0 Flowise: Unauthenticated RCE via MCP config injection
Same attack type: Code Execution