CVE-2026-5422: jupyter-server: path traversal exposes sibling dir files
AWAITING NVDA path traversal flaw in jupyter-server 2.17.0 allows an authenticated user to read and write files outside the designated root directory by exploiting a missing trailing separator in the boundary check combined with unstripped '..' path components in the to_os_path() utility. In shared or multi-tenant Jupyter environments — common in AI/ML research clusters, data science platforms, and educational institutions — this means one user can access another's notebooks, training datasets, API keys, or model artifacts stored in adjacent directories. No CVSS score or EPSS data is published yet and no public exploit or KEV listing exists, but the attack primitive is classic path traversal requiring minimal skill from any authenticated user on a shared system. Upgrade jupyter-server beyond 2.17.0 immediately on any shared deployment; single-user containerized instances have significantly reduced exposure.
What is the risk?
Medium-High for multi-tenant or shared Jupyter deployments (JupyterHub, hosted data science platforms, research institution servers). Low for isolated single-user containerized instances. The root boundary bypass requires only basic path manipulation — no AI/ML expertise needed — making it accessible to any authenticated user on a shared system. Blast radius is bounded by what sibling directories contain, but in AI/ML environments these commonly hold sensitive assets: dataset files, model weights, environment configs with API keys, and SSH credentials.
Attack Kill Chain
What systems are affected?
Severity & Risk
What should I do?
1 step-
1) Upgrade jupyter-server to a version beyond 2.17.0 — monitor the project GitHub releases for the patched build (reference: huntr.com bounty 24a36953). 2) For shared deployments, isolate each user's Jupyter root to a dedicated containerized or VM-based environment — do not rely solely on directory-level path checks. 3) Audit the directory structure around your Jupyter root for sensitive files reachable via sibling-directory traversal. 4) Implement filesystem-level ACLs (AppArmor or SELinux profiles) restricting the Jupyter process strictly to its intended root tree. 5) Monitor server access logs for requests to /api/contents containing '../' or percent-encoded traversal sequences in file path parameters.
Classification
Compliance Impact
This CVE is relevant to:
Frequently Asked Questions
What is CVE-2026-5422?
A path traversal flaw in jupyter-server 2.17.0 allows an authenticated user to read and write files outside the designated root directory by exploiting a missing trailing separator in the boundary check combined with unstripped '..' path components in the to_os_path() utility. In shared or multi-tenant Jupyter environments — common in AI/ML research clusters, data science platforms, and educational institutions — this means one user can access another's notebooks, training datasets, API keys, or model artifacts stored in adjacent directories. No CVSS score or EPSS data is published yet and no public exploit or KEV listing exists, but the attack primitive is classic path traversal requiring minimal skill from any authenticated user on a shared system. Upgrade jupyter-server beyond 2.17.0 immediately on any shared deployment; single-user containerized instances have significantly reduced exposure.
Is CVE-2026-5422 actively exploited?
No confirmed active exploitation of CVE-2026-5422 has been reported, but organizations should still patch proactively.
How to fix CVE-2026-5422?
1) Upgrade jupyter-server to a version beyond 2.17.0 — monitor the project GitHub releases for the patched build (reference: huntr.com bounty 24a36953). 2) For shared deployments, isolate each user's Jupyter root to a dedicated containerized or VM-based environment — do not rely solely on directory-level path checks. 3) Audit the directory structure around your Jupyter root for sensitive files reachable via sibling-directory traversal. 4) Implement filesystem-level ACLs (AppArmor or SELinux profiles) restricting the Jupyter process strictly to its intended root tree. 5) Monitor server access logs for requests to /api/contents containing '../' or percent-encoded traversal sequences in file path parameters.
What systems are affected by CVE-2026-5422?
This vulnerability affects the following AI/ML architecture patterns: training pipelines, data science workspaces, agent frameworks, model development environments, MLOps platforms.
What is the CVSS score for CVE-2026-5422?
No CVSS score has been assigned yet.
AI Security Impact
Affected AI Architectures
MITRE ATLAS Techniques
AML.T0025 Exfiltration via Cyber Means AML.T0035 AI Artifact Collection AML.T0037 Data from Local System AML.T0049 Exploit Public-Facing Application Compliance Controls Affected
Technical Details
Original Advisory
A path traversal vulnerability exists in jupyter-server version 2.17.0 due to an incorrect root directory boundary check in the _get_os_path() function within jupyter_server/services/contents/fileio.py. The check uses startswith(root) without appending a trailing path separator, allowing sibling directories with names starting with the same prefix as root_dir to bypass the check. Additionally, the to_os_path() function in utils.py does not strip ".." from path parts, enabling traversal sequences to bypass the vulnerable check. This vulnerability can lead to unauthorized read/write access to files in sibling directories, potentially exposing sensitive data in shared hosting environments.
Exploitation Scenario
An authenticated user on a shared JupyterHub deployment targets a colleague's workspace: they craft a request to the /api/contents endpoint with a path like '../jupyter-user-bob-workspace/../.env' or similar payload targeting a sibling directory whose name starts with the same prefix as the configured root_dir. The boundary check passes because 'startswith(root)' matches the prefix without validating the trailing separator boundary, and since '../' is not stripped from path components by to_os_path(), the traversal resolves to the adjacent directory. The attacker reads API keys, training data, or proprietary model artifacts from the victim workspace, or writes a malicious notebook that executes on the victim's next kernel start, enabling training data poisoning or credential-based lateral movement.
Weaknesses (CWE)
Timeline
Related Vulnerabilities
CVE-2023-25574 10.0 JupyterHub LTI13: JWT forgery enables full auth bypass
Same package: jupyter CVE-2026-42266 8.8 JupyterLab: Extension allow-list bypass enables privesc
Same package: jupyter CVE-2025-30370 7.4 jupyterlab-git: command injection via malicious repo name
Same package: jupyter CVE-2025-30167 7.3 jupyter_core: config hijack enables cross-user code exec
Same package: jupyter CVE-2026-35397 7.1 Jupyter Server: path traversal leaks sibling directories
Same package: jupyter