CVE-2026-44727: Jupyter Server: Stored XSS in `NbconvertFileHandler` / `NbconvertPostHandler` via missing `sandbox` CSP
Jupyter Server is the backend for Jupyter web applications. Prior to 2.20, the nbconvert HTTP handlers in jupyter_server render user-authored notebook HTML under the Jupyter origin without a sandbox directive in their Content-Security-Policy. Combined with nbconvert.HTMLExporter's default non-sanitizing behavior, a notebook carrying an HTML payload in a display_data output triggers stored XSS with cookie access, full /api/* authority, and kernel RCE. This vulnerability is fixed in 2.20.
Security readout for executives and security teams
Plain-English summary
A malicious notebook can run attacker-controlled browser code when another user views its converted HTML in Jupyter Server. Because the code runs as the Jupyter site, it may access the victim’s session, use Jupyter APIs, and ultimately execute code through a kernel.
Executive priority
Treat remediation as immediate for shared or externally reachable Jupyter environments. Successful exploitation could cross user trust boundaries and lead to sensitive-data access or server-side code execution through kernels. Upgrade promptly, identify high-risk collaborative deployments first, and investigate suspicious notebook activity where exposure existed.
Technical view
Before version 2.20, NbconvertFileHandler and NbconvertPostHandler serve user-authored notebook HTML without a sandbox directive in Content-Security-Policy. Combined with HTMLExporter’s default non-sanitizing behavior, this enables stored cross-site scripting. Exploitation requires limited privileges to introduce content and user action to render it, but can compromise cookies, API authority, data, and kernels.
Likely exposure
Exposure exists wherever jupyter_server versions below 2.20 render notebooks from users or other untrusted sources. Shared, multi-user, research, education, and hosted notebook environments deserve particular attention because one user may influence content opened by another. The supplied sources do not establish how widely vulnerable versions are deployed.
Exploitation context
The CVSS 4.0 score is 9.3. The attack is network-accessible, low complexity, requires limited privileges, and needs a victim action. The source bundle reports that this CVE is not in KEV and provides no evidence of active exploitation. That absence should not be interpreted as proof that exploitation has never occurred.
Researcher notes
The core issue is an origin-trust failure: unsanitized notebook HTML is served under the privileged Jupyter origin without CSP sandboxing. CWE-79 and CWE-1021 are assigned. The documented impact chain reaches full /api/* authority and kernel code execution. The supplied evidence identifies the fixed version and commit, but does not document public exploitation or a proof of concept.
Mitigation direction
Upgrade jupyter_server to version 2.20 or later, following the upstream advisory and applicable distributor errata.
Prioritize shared Jupyter systems where users can upload notebooks or induce others to render them.
Until upgraded, limit ingestion and viewing of notebooks from untrusted or lower-trust users.
Apply relevant Red Hat errata when using affected Red Hat-distributed packages.
Validation and detection
Inventory every Jupyter Server deployment and confirm the installed jupyter_server version is 2.20 or later.
Verify rendered nbconvert HTML responses enforce the sandbox Content-Security-Policy behavior introduced by the fix.
Confirm package-level remediation against the applicable upstream advisory or distributor erratum.
Review notebook sharing, upload, and nbconvert access records for suspicious activity; clean logs cannot exclude prior compromise.
Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.
Potential ATT&CK relevance
Conservative CVE-to-ATT&CK context
These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.
ATT&CK lookup starting points
Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.
cwe · low confidence lookup
CWE-1021: Exact CWE lookup
Use the exact CWE identifier as the starting point before reviewing related ATT&CK behavior. Open the exact CWE lookup page first, then review the ATT&CK searches from that MITRE weakness context. This is a Glexia lookup hint, not an official ATT&CK mapping.
Client-side and session-facing weaknesses should be reviewed alongside initial-access and user-execution behaviors. Open the exact CWE lookup page first, then review the ATT&CK searches from that MITRE weakness context. This is a Glexia lookup hint, not an official ATT&CK mapping.
The CVE wording references code or command execution, so execution technique review may help defensive triage. This is a Glexia inferred lookup path, not an official MITRE, ATT&CK, or CVE Program mapping.
These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.
2CVSS vectors
5Timeline events
2ADP providers
8Source links
SSVC decision data
CISA-ADPCISA Coordinator
Timestamp
Version
2.0.3
Exploitation: noneAutomatable: noTechnical Impact: total
CVSS vector scores
2 official scores
We collect every scored CVSS vector available in the official CNA and ADP containers. When more than one version is present, the table keeps the source vectors side by side instead of collapsing them into the highest score.