CVE-2026-73417: JupyterLab: settings CSS injection leads to code exec
UNKNOWNJupyterLab's Settings Editor lets users import an overrides.json file to customize the interface, but two margin-override fields aren't sanitized before being inserted into style content — a crafted file executes arbitrary code instead of just changing layout, and that code runs with the victim's full access to notebooks, files, and the connected kernel. This matters most for organizations running JupyterHub or other shared Jupyter deployments, where an attacker who can plant a file in a shared settings location doesn't need the victim to click anything at all. The immediate exploitation risk is low — EPSS sits at 0.55% (roughly median, top 56th percentile), the CVE isn't in CISA's KEV catalog, CISA's own SSVC decision is TRACK (lowest priority), and there's no public PoC or Nuclei template yet — but the impact ceiling is high given code execution reaches the kernel where credentials, training data, and model artifacts often live. Patch to JupyterLab 4.5.10 or 4.6.2 now; if you can't patch immediately, lock down write access to shared settings paths in multi-tenant deployments and tell users not to import overrides.json files from untrusted sources.
What is the risk?
Low near-term exploitation probability but meaningful blast radius in shared environments. EPSS (0.55%, ~56th percentile) and the absence of KEV listing, public exploit code, or a Nuclei template all point to no active exploitation. CISA's SSVC decision of TRACK confirms this is not an emergency-patch scenario for typical single-user installs. However, the requirement for user interaction (or a writable shared settings path) is a meaningful but not high barrier — in JupyterHub/multi-tenant research and education deployments where home directories or shared volumes are writable by multiple users, an attacker doesn't need social engineering at all, just file placement. Given the ai_tool categorization and JupyterLab's ubiquity as the default IDE for data scientists and ML engineers, treat this as moderate risk with priority patching for any shared/hosted JupyterLab deployment.
How does the attack unfold?
How severe is it?
What should I do?
1 stepUpgrade to JupyterLab 4.5.10 (4.x branch) or 4.6.2 immediately — both are patched. If immediate upgrade isn't possible, restrict the Settings Editor's Import feature via deployment configuration or extension policy where feasible, and lock down write permissions on any shared settings/config paths in JupyterHub or multi-tenant deployments so untrusted users can't plant an overrides.json. Advise users never to import a settings/overrides file received from an untrusted source, even if framed as a 'team layout' or 'theme preset.' For detection, audit JupyterHub shared volumes and user home directories for unexpected overrides.json files or recent writes to Jupyter settings paths, and review notebook server access logs for anomalous API calls following a settings-import event.
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-73417?
JupyterLab's Settings Editor lets users import an overrides.json file to customize the interface, but two margin-override fields aren't sanitized before being inserted into style content — a crafted file executes arbitrary code instead of just changing layout, and that code runs with the victim's full access to notebooks, files, and the connected kernel. This matters most for organizations running JupyterHub or other shared Jupyter deployments, where an attacker who can plant a file in a shared settings location doesn't need the victim to click anything at all. The immediate exploitation risk is low — EPSS sits at 0.55% (roughly median, top 56th percentile), the CVE isn't in CISA's KEV catalog, CISA's own SSVC decision is TRACK (lowest priority), and there's no public PoC or Nuclei template yet — but the impact ceiling is high given code execution reaches the kernel where credentials, training data, and model artifacts often live. Patch to JupyterLab 4.5.10 or 4.6.2 now; if you can't patch immediately, lock down write access to shared settings paths in multi-tenant deployments and tell users not to import overrides.json files from untrusted sources.
Is CVE-2026-73417 actively exploited?
No confirmed active exploitation of CVE-2026-73417 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-73417?
Upgrade to JupyterLab 4.5.10 (4.x branch) or 4.6.2 immediately — both are patched. If immediate upgrade isn't possible, restrict the Settings Editor's Import feature via deployment configuration or extension policy where feasible, and lock down write permissions on any shared settings/config paths in JupyterHub or multi-tenant deployments so untrusted users can't plant an overrides.json. Advise users never to import a settings/overrides file received from an untrusted source, even if framed as a 'team layout' or 'theme preset.' For detection, audit JupyterHub shared volumes and user home directories for unexpected overrides.json files or recent writes to Jupyter settings paths, and review notebook server access logs for anomalous API calls following a settings-import event.
What systems are affected by CVE-2026-73417?
This vulnerability affects the following AI/ML architecture patterns: training pipelines, model development environments, multi-tenant research platforms (JupyterHub).
What is the CVSS score for CVE-2026-73417?
No CVSS score has been assigned yet.
What is the AI security impact?
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0011User ExecutionAML.T0011.000Unsafe AI ArtifactsAML.T0050Command and Scripting InterpreterCompliance Controls Affected
What are the technical details?
Original Advisory
jupyterlab is an extensible environment for interactive and reproducible computing, based on the Jupyter Notebook Architecture. From 3.3.0 until 4.5.10 and 4.6.2, JupyterLab allows notebook settings to be shared and applied through an overrides.json file using the Import button in the Settings Editor. In packages/notebook-extension/schema/tracker.json and packages/notebook-extension/src/index.ts, the sideBySideLeftMarginOverride and sideBySideRightMarginOverride settings are not properly validated before being inserted into style content, allowing a crafted settings file to contain instructions that execute as code instead of only changing display preferences. A user can import the malicious file, or an attacker with access to a shared settings location can plant an overrides.json that is applied automatically. The embedded code runs with the affected user's access and can read or modify notebooks and files and run code through the notebook server, including on a connected kernel. This issue is fixed in versions 4.5.10 and 4.6.2.
Exploitation Scenario
In a JupyterHub multi-tenant research environment, an attacker with access to a shared settings location (a shared network drive, a compromised low-privilege account, or a poisoned dotfile in a shared base image) plants a malicious overrides.json containing crafted sideBySideLeftMarginOverride/sideBySideRightMarginOverride values. When the victim's JupyterLab instance loads the settings — either auto-applied from the shared path, or manually imported after a phishing lure disguised as a 'team layout preset' — the unsanitized values are injected into style content, executing attacker script inside the victim's JupyterLab session. From there the code abuses the victim's authenticated session to call the notebook server's REST API, reading and modifying notebooks and files, and running arbitrary code on the connected kernel — reaching any cloud credentials, training data, or model artifacts accessible to that kernel.
Weaknesses (CWE)
CWE-116Improper Encoding or Escaping of OutputPrimaryCWE-79Improper Neutralization of Input During Web Page GenerationPrimaryCWE-116Improper Encoding or Escaping of OutputCWE-79Improper Neutralization of Input During Web Page GenerationCWE-116 — Improper Encoding or Escaping of Output: The product prepares a structured message for communication with another component, but encoding or escaping of the data is either missing or done incorrectly. As a result, the intended structure of the message is not preserved.
- [Architecture and Design] Use a vetted library or framework that does not allow this weakness to occur or provides constructs that make this weakness easier to avoid. For example, consider using the ESAPI Encoding control [REF-45] or a similar tool, library, or framework. These will help the programmer encode outputs in a manner less prone to error. Alternately, use built-in functions, but consider using wrappers in case those functions are discovered to have a vulnerability.
- [Architecture and Design] If available, use structured mechanisms that automatically enforce the separation between data and code. These mechanisms may be able to provide the relevant quoting, encoding, and validation automatically, instead of relying on the developer to provide this capability at every point where output is generated. For example, stored procedures can enforce database query structure and reduce the likelihood of SQL injection.
Source: MITRE CWE corpus.
References
- github.com/jupyterlab/jupyterlab/commit/9365f020baec5221deaf11535ed554c06637c999
- github.com/jupyterlab/jupyterlab/commit/be9303f5bcd5308eaeae953c5a3c903046682c2c
- github.com/jupyterlab/jupyterlab/commit/f1beab4a2027af4719d6edc07d52d6cf5a39a432
- github.com/jupyterlab/jupyterlab/pull/19184
- github.com/jupyterlab/jupyterlab/pull/19185
- github.com/jupyterlab/jupyterlab/pull/19186
- github.com/jupyterlab/jupyterlab/releases/tag/v4.5.10
- github.com/jupyterlab/jupyterlab/releases/tag/v4.6.2
- github.com/jupyterlab/jupyterlab/releases/tag/v4.7.0a1
- github.com/jupyterlab/jupyterlab/security/advisories/GHSA-pppj-hq3g-57pj
Timeline
Related Vulnerabilities
CVE-2024-291210.0BentoML: RCE via insecure deserialization (CVSS 10)
Same attack type: Code ExecutionCVE-2026-2185810.0n8n: Input Validation flaw enables exploitation
Same attack type: Code ExecutionCVE-2025-512010.0smolagents: sandbox escape enables unauthenticated RCE
Same attack type: Code ExecutionCVE-2025-5952810.0Flowise: Unauthenticated RCE via MCP config injection
Same attack type: Code ExecutionGHSA-vvpj-8cmc-gx3910.0picklescan: security flaw enables exploitation
Same attack type: Code Execution