Skip to main content

JupyterLab EUVDEUVD-2026-98809

| CVE-2026-102832 MEDIUM
Time-of-check Time-of-use (TOCTOU) Race Condition (CWE-367)
2026-10-13 GitHub_M GHSA-jwrc-gm9j-263p
4.2
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Deliver crafted notebook with command-link button
  2. Delivery
    Victim clicks Trust prompt
  3. Exploit
    Switch current widget during open dialog
  4. Execution
    Wrong document marked trusted and signature persisted
  5. Impact
    Later 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.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.1% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

jupyterlab 4.6.0, < 4.6.4
jupyterlab 4.5.7, < 4.5.11
jupyterlite-core 0.7.5, < 0.8.4
notebook 7.5.6, < 7.6.3

Affected Packages

pypi jupyterlab fix: 4.5.11, 4.6.4
pypi jupyterlite-core fix: 0.8.4
pypi notebook fix: 7.6.3

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

Vendor (GitHub_M) PRIMARY 4.2 MEDIUM
AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N
vuln.today AI 4.2 MEDIUM

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.

3.1 AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N
4.0 AV:N/AC:H/AT:P/PR:N/UI:A/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N
Red Hat 4.2 MEDIUM

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
High
Privileges Required
None
User Interaction
Required
Scope
Unchanged
Confidentiality
Low
Integrity
Low
Availability
None

Lifecycle Timeline

2
Patch available
Oct 13, 2026 - 17:03 EUVD
CVE Published
Oct 13, 2026 - 15:19 cve.org
MEDIUM 4.2

DescriptionCVE.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
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 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

EPSS Score
0.1%
Top 97% exploitable
Prevalence
High
JupyterLab/Notebook/JupyterLite widely deployed across data-science and research environments
Threat Intel
1
1 source
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA Vendor GitHub VulDB

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.1%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact· derived
High
Technical Impact
Partial

Priority Score

21
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +21
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

CVE-2024-39700 CRITICAL POC
9.8 Jul 16

JupyterLab extension template is a `copier` template for JupyterLab extensions. Rated critical severity (CVSS 9.8), this

CVE-2021-32797 CRITICAL POC
9.6 Aug 09

JupyterLab is a user interface for Project Jupyter which will eventually replace the classic Jupyter Notebook. Rated cri

CVE-2024-22421 MEDIUM
6.5 Jan 19

JupyterLab is an extensible environment for interactive and reproducible computing, based on the Jupyter Notebook and Ar

CVE-2024-43805 MEDIUM
6.1 Aug 28

jupyterlab is an extensible environment for interactive and reproducible computing, based on the Jupyter Notebook Archit

CVE-2024-22420 MEDIUM
6.1 Jan 19

JupyterLab is an extensible environment for interactive and reproducible computing, based on the Jupyter Notebook and Ar

CVE-2026-73627 MEDIUM
6.0 Aug 13

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

CVE-2026-102904 MEDIUM
5.4 Sep 29

Argument injection in JupyterLab's PyPI Extension Manager (JupyterLab 4.0.0 through 4.5.10 and the 4.6.x branch before 4

CVE-2026-67338 MEDIUM
5.1 Aug 01

Stored cross-site scripting in JupyterLab's Extension Manager allows an attacker who publishes a malicious PyPI package

CVE-2025-59842 LOW
2.1 Sep 26

jupyterlab is an extensible environment for interactive and reproducible computing, based on the Jupyter Notebook Archit

CVE-2026-73626 HIGH
7.7 Aug 13

Allowlist/blocklist enforcement in JupyterLab's PyPIExtensionManager.install() was silently bypassed due to a missing 'a

Vendor StatusVendor

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy