jupyter/jupyter: Relative Path Traversal
CVE-2026-5422 is a high-severity relative path traversal vulnerability in jupyter/jupyter from Jupyter, with a CVSS 3.1 base score of 8.1 out of 10. It can be exploited remotely over the network by an attacker with a low-privileged account, without any action from a user. Affected jupyter/jupyter versions: latest and earlier. The record does not name a fixed version, so check the vendor advisory. There is no confirmed exploitation so far. EPSS estimates a 4.86% chance of exploitation within 30 days, which is in the top 7.83% of all scored CVEs.
High severity with no evidence of exploitation so far.
What to do
- Check which version of jupyter/jupyter you run against the affected versions below, and install the vendor's latest release.
Affected products and versions
| Vendor | Product | Affected versions | Fixed in |
|---|---|---|---|
| Jupyter | jupyter/jupyter | latest and earlier | Not stated |
| Jupyter | Jupyter Server | 2.17.0 | Not stated |
Version data comes from the organisation that assigned the CVE. Confirm against the vendor advisory before deciding you are unaffected.
How the severity score breaks down
- Attack vector
- NetworkCan be exploited remotely over a network, including the internet.
- Attack complexity
- LowNo special conditions are needed; the attack works reliably.
- Privileges required
- LowA basic user account is enough.
- User interaction
- NoneNo action by a victim is required.
- Scope
- UnchangedImpact stays within the vulnerable component.
- Confidentiality
- HighAll data handled by the component can be read.
- Integrity
- HighData or code can be modified at will.
- Availability
- NoneAvailability is not affected.
Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N. Scored by NVD.
| Scoring system | Score | Severity | Scored by |
|---|---|---|---|
| CVSS 3.1 | 8.1 | High | NVD |
| CVSS 3.0 | 6.8 | Medium | CNA (huntr.dev) |
Official description
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.
Source: the CVE record as published by its numbering authority, via NVD and CVE.org.
The underlying weakness: Relative Path Traversal
The product uses external input to construct a pathname that should be within a restricted directory, but it does not properly neutralize sequences such as.. that can resolve to a location that is outside of that directory.
How developers prevent this class of flaw
- Use an application firewall that can detect attacks against this weakness. It can be beneficial in cases in which the code cannot be fixed (because it is controlled by a third party), as an emergency prevention measure while more comprehensive software assurance measures are applied, or to provide defense in depth.
Timeline
- CVE record published.
- CISA published its SSVC assessment (exploitation: poc, automatable: no, technical impact: total).
- Record last changed materially (score, affected products, status or references).
References
Technical write-ups (may include proof of concept)
- huntr.com/bounties/24a36953-6490-466f-8cb2-a90d1ca56e0fExploit, Third Party Advisory
Other vulnerabilities in jupyter/jupyter
- 8.8 High severity
Recent Relative Path Traversal vulnerabilities
- 7.5 High severity
- 10.0 Critical severity
- 7.8 High severity
- 7.5 High severity
- 9.1 Critical severity
- 7.2 High severity
Spotted an error? Tell us.