Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessDeliver crafted notebook with command-link button
-
DeliveryVictim clicks Trust prompt
-
ExploitSwitch current widget during open dialog
-
ExecutionWrong document marked trusted and signature persisted
-
ImpactLater command-links execute without prompt
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture TOCTOU prevention
|
| Exploitation Conditions | Exploitation requires that the markdownviewer:trust or notebook:trust command-link flow be used - i.e. a document containing a command-linker Trust button - and that a second document become the current widget in the shell tracker during the brief interval between the user clicking the button and answering the Trust dialog. The user MUST actively choose 'Trust' (and confirm notebook trust), so social engineering or a realistic multi-document workflow is needed. Limiting factors: the race window is narrow (AC:H), success depends on controlling or predicting which widget becomes current at answer-time, and no elevated privileges are needed because the victim operates their own JupyterLab session (PR:N); only affected versions 4.5.7 up to the 4.5.11/4.6.4 fixes are exposed. |
| Impact | This is a genuine but low-urgency issue, and the signals are internally consistent rather than conflicting. The provided CVSS 3.1 vector (AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N, base 4.2 Medium) correctly reflects a CWE-367 time-of-check/time-of-use race: AC:H captures the narrow timing window (the victim must switch the current document while the Trust prompt is open), and UI:R captures the mandatory human action of clicking Trust. No EPSS score was supplied, there is no CISA KEV listing, and no public exploit is referenced, so exploitation status is 'no public exploit identified at time of analysis.' The impact is a trust-boundary/integrity bypass (one document trusted instead of the one whose button was clicked), which maps better to the I:L rating than to the 'Information Disclosure' tag applied in the input - the real consequence is unprompted execution of command-links and persisting a server trust signature, not data leakage. Net: a legitimate security fix worth patching on normal cadence, not an emergency; the combination of high attack complexity, required user interaction, and no evidence of in-the-wild use places it well below actively-exploited priorities. |
| Exploit ScenarioDerived | An attacker shares a crafted notebook or Markdown document containing a command-link Trust button. When a victim clicks Trust, the attacker (or an unlucky timing of the victim's own window switching) causes a different, attacker-controlled document to become the current widget before the victim confirms, so JupyterLab trusts that second document instead. Later command buttons in the wrongly-trusted document then execute without any prompt. No public exploit code is identified, and the race window plus required user interaction make reliable exploitation difficult. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 13, 2026
Improper trust attribution in JupyterLab's markdownviewer:trust and notebook:trust command-link handlers lets a Trust decision apply to the wrong document: the handler resolves the target via tracker.currentWidget when the user answers the dialog instead of retaining the document whose command button was clicked, so a second document that becomes current during the prompt is marked trusted while the original remains untrusted. The result is that command buttons in the incorrectly trusted document later run without any prompt, and for notebooks trust also marks all cells trusted, saves unsaved edits, and writes the server signature to disk. Per the assessed vector (AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N, score 4.2) this is a narrow race that requires the user to actively answer Trust and requires a second document to become current in the window between the click and the answer; no public exploit identified at time of analysis, and vendor fixes are available in 4.5.11 and 4.6.4.
RemediationAI
Upgrade to JupyterLab 4.5.11 or 4.6.4, the exact fix versions published as tagged releases (https://github.com/jupyterlab/jupyterlab/releases/tag/v4.5.11 and https://github.com/jupyterlab/jupyterlab/releases/tag/v4.6.4), and rebuild any distribution that bundles JupyterLab - including affected Notebook and JupyterLite/JupyterLite Core releases - on top of those versions; building from the upstream fix commits referenced in advisory GHSA-jwrc-gm9j-263p is a valid interim step for downstream packagers. Until patched, the practical compensating control is procedural: never answer a markdownviewer:trust or notebook:trust prompt, and never confirm notebook trust, while other documents might become the current widget, since the flaw only manifests when a second document becomes active between clicking the command-link button and answering the dialog - close or avoid other notebooks and Markdown viewers during a trust decision, and treat any Trust prompt whose originating tab is no longer the active one as suspect and dismiss it rather than confirming. A stricter fallback is to have users avoid clicking command-link Trust buttons in untrusted documents altogether, which removes the trigger but disables legitimate command-link workflows in trusted content; there is no configuration switch documented in the available data that separates the vulnerable trust path from normal notebook behavior, so patching is the durable fix.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 3 packages in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The root cause is a time-of-check/time-of-use race (CWE-367). In JupyterLab's command-link machinery, HTML output rendered in a Markdown viewer or notebook can embed a button carrying a command-linker trust command. Prior to the fix, the handler for markdownviewer:trust and notebook:trust did not bind the pending trust prompt to a specific document or DOM boundary; when the user answered the dialog, the code resolved the target document through the shell's tracker.currentWidget. Because the answer is consumed asynchronously, any widget activation occurring while the dialog is open redirects the trust grant. The upstream patch (commits 0fc18ab4ef67e431a8f6560e387193baf786c70a, b64bc88b8ca034cf158604a5cc48ca9170ea453b, f7e5f9803fdf2aaaa0e9bfb9cc73386a8cc5f0b2) introduces a trust boundary identifier (TRUST_BOUNDARY_ID_ARG, DOMUtils.createDomID()) passed as a command argument and re-validates the boundary with a private _isTrusted() check after execution, with Galata end-to-end tests added to cover the command-link trust flow. Trust in JupyterLab is the security boundary that governs whether untrusted output is sanitized and whether embedded command links may execute, so misattributing trust elevates the wrong document into a state where its command buttons execute without prompting. CPE data identifies the affected code bases as jupyterlab:jupyterlab, jupyterlab:jupyterlite-core, and jupyterlab:notebook, consistent with the description that bundled distributions, including affected Notebook and JupyterLite releases, inherit the behavior.
Know when Jupyterlab gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N
Timing race gives AC:H; victim runs their own session so PR:N but UI:R for the Trust click; impact is a trust-boundary bypass with limited integrity/confidentiality (I:L/C:L), no availability effect.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
JupyterLab is an extensible environment for interactive and reproducible computing, based on the Jupyter Notebook Architecture. From 4.5.7 until 4.5.11 and 4.6.4, the markdownviewer:trust and notebook:trust command-link handlers use tracker.currentWidget to resolve the current Markdown viewer or notebook when the user answers rather than retaining the document whose command button was clicked. If another document becomes current while the prompt is open and the user chooses Trust, JupyterLab marks the second document trusted while leaving the clicked document untrusted. Later command buttons in the incorrectly trusted document run without a prompt, and trusting a notebook marks all cells trusted, saves unsaved edits, and persists the server signature to disk. Applications that bundle JupyterLab, including affected Notebook and JupyterLite releases, inherit the behavior. This issue is fixed in versions 4.5.11 and 4.6.4.
Blast Radius
ecosystem impact- 5 pypi packages depend on jupyterlab (2 direct, 3 indirect)
- 4 pypi packages depend on notebook (0 direct, 4 indirect)
Ecosystem-wide dependent count for version 4.6.0 and other introduced versions.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
More in Jupyterlab
View allJupyterLab extension template is a `copier` template for JupyterLab extensions. Rated critical severity (CVSS 9.8), this
JupyterLab is a user interface for Project Jupyter which will eventually replace the classic Jupyter Notebook. Rated cri
JupyterLab is an extensible environment for interactive and reproducible computing, based on the Jupyter Notebook and Ar
jupyterlab is an extensible environment for interactive and reproducible computing, based on the Jupyter Notebook Archit
JupyterLab is an extensible environment for interactive and reproducible computing, based on the Jupyter Notebook and Ar
Plugin lock-rule enforcement bypass in JupyterLab (pip package, versions >=4.1.0,<=4.5.9 and >=4.6.0,<=4.6.1) allows aut
Argument injection in JupyterLab's PyPI Extension Manager (JupyterLab 4.0.0 through 4.5.10 and the 4.6.x branch before 4
Stored cross-site scripting in JupyterLab's Extension Manager allows an attacker who publishes a malicious PyPI package
jupyterlab is an extensible environment for interactive and reproducible computing, based on the Jupyter Notebook Archit
Allowlist/blocklist enforcement in JupyterLab's PyPIExtensionManager.install() was silently bypassed due to a missing 'a
EUVD-2026-98809
GHSA-jwrc-gm9j-263p
NVD
CVE.org
EPSS
Vulnrichment
VulDB
Exploit-DB