Skip to main content

JupyterLab CVE-2026-73626

| EUVDEUVD-2026-57795 HIGH
Improper Access Control (CWE-284)
2026-08-13 VulnCheck GHSA-r336-hqvq-mfjh
High
Disputed · 7.7 Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Access
    Authenticate as low-privilege user
  2. Delivery
    Access custom integration endpoint calling install() directly
  3. Exploit
    Supply blocked package name as untrusted input
  4. Execution
    Allowlist coroutine silently skipped due to missing await
  5. Impact
    Unauthorized PyPI package installed into JupyterLab environment

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Access control enforcement
MITRE ATT&CK

1 technique across 1 tactic: Defense Evasion

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires all four of the following conditions to be present simultaneously: (1) a custom extension or downstream integration must import PyPIExtensionManager and call install() directly with a package name derived from untrusted user input - the stock JupyterLab HTTP API handler and Extension Manager UI perform their own separate, correctly awaited check and are explicitly not affected; (2) an allowlist or blocklist must be actively configured with the intent of restricting which packages users may install; (3) the PyPI Extension Manager must be enabled, which is the default but can be replaced; and (4) kernels and terminals must be disabled or delegated to remote hosts, removing alternative package-installation vectors that would otherwise make this bypass redundant. PR:L in the CVSS vector confirms authenticated access is required. If any single condition is absent, this vulnerability carries no security consequence.

Impact

The CVSS 4.0 score of 7.7 with AV:N/AC:H/PR:L reflects a meaningful theoretical impact ceiling, but the SSVC assessment (Exploitation: none, Automatable: no, Technical Impact: partial) and an EPSS of 0.18% (8th percentile) together indicate that real-world exploitation is highly constrained and has not been observed. The AC:H rating accurately captures the four simultaneous non-default conditions required - a custom integration calling install() directly with untrusted input, a configured allowlist/blocklist, the PyPI Extension Manager enabled, and kernels/terminals disabled or remote. Absent any one of these, there is no security impact at all. The stock JupyterLab deployment is entirely unaffected, so even a standard institutional or organizational deployment faces no exposure from this flaw in its default configuration. This is a genuine defense-in-depth gap worth patching promptly, but it does not represent a broadly exploitable vulnerability warranting emergency response outside of the narrow affected deployment profile. No public exploit code exists and no KEV listing has been issued, consistent with the low EPSS signal.

Exploit ScenarioDerived

An authenticated user with low privileges gains access to a custom downstream integration or extension that calls PyPIExtensionManager.install() directly with user-supplied package names. Because the coroutine-based allowlist check silently fails to execute, a package name that the administrator intended to block is accepted and installed, potentially introducing malicious or unauthorized code into the JupyterLab environment. No public proof-of-concept code has been identified, and this scenario requires the attacker to operate within a non-default, specifically configured deployment with terminals and kernels disabled.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.2% exploitation probability (EPSS)

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

Alert me

AnalysisAIv2 – Aug 28, 2026

Allowlist/blocklist enforcement in JupyterLab's PyPIExtensionManager.install() was silently bypassed due to a missing 'await' on the is_install_allowed coroutine, allowing authenticated low-privilege users to install otherwise-blocked PyPI packages in narrowly configured deployments. Affected are JupyterLab >=4.6.0 <=4.6.1 and <=4.5.9; the stock HTTP API and Extension Manager UI are explicitly not affected because they perform their own independently awaited check. No active exploitation has been identified - CISA KEV is absent, EPSS sits at 0.18% (8th percentile), and SSVC rates exploitation as none with non-automatable impact.

Earlier versions of this analysis (1)
v1 Aug 13, 2026 - 12:53

Allowlist/blocklist bypass in JupyterLab's PyPIExtensionManager.install() allows unauthorized pip packages to be installed when a custom extension or downstream integration calls install() directly with untrusted input - a missing 'await' on the is_install_allowed coroutine caused the async check body to never execute, silently emitting only a RuntimeWarning. The stock JupyterLab HTTP API and Extension Manager UI are not affected; the gap is limited to non-standard programmatic callers of the public install() method. No public exploit exists; vendor-released patches are available in JupyterLab 4.6.2 and 4.5.10.

RemediationAI

Upgrade to JupyterLab 4.6.2 (for 4.6.x deployments) or 4.5.10 (for 4.5.x deployments) as confirmed by the vendor advisory at https://github.com/jupyterlab/jupyterlab/security/advisories/GHSA-whvh-wf3x-g77j; patch commits are tracked in pull requests https://github.com/jupyterlab/jupyterlab/pull/19184 and https://github.com/jupyterlab/jupyterlab/pull/19185. Users of downstream applications such as Notebook v7+ must explicitly upgrade the jupyterlab pip package as well. For deployments that cannot immediately patch, a complete workaround is to switch to the read-only extension manager using the CLI flag '--LabApp.extension_manager=readonly' or the traitlet 'c.LabApp.extension_manager = readonly'; this disables all programmatic extension installation but also prevents legitimate users from adding extensions through any interface. No action is required for deployments that exclusively expose extension management through the standard JupyterLab HTTP API or Extension Manager UI, as those paths were unaffected.

Affected VersionsENISA

jupyterlab 4.6.0 <4.6.1
jupyterlab 0 <4.5.10

Affected Packages

pypi jupyterlab fix: 4.5.10, 4.6.1, 4.6.2

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in pypi

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

JupyterLab uses an async Python architecture where extension installation is managed by PyPIExtensionManager. The install() method was intended to self-enforce the configured allowlist/blocklist by calling the is_install_allowed coroutine, but the missing 'await' keyword caused Python to create a coroutine object without executing it, emitting only a RuntimeWarning. This is a CWE-284 (Improper Access Control) defect rooted in Python async/await semantics - the control check appeared present in code but was never actually invoked at runtime. The CPE cpe:2.3:a:jupyterlab:jupyterlab covers the affected pip package. Because the HTTP API handler independently invokes its own correctly awaited check before calling install(), the gap existed only in the install() method itself as a secondary defense-in-depth layer, not in the primary access path.

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

Sources disagree (Low–High)
Vendor (VulnCheck) PRIMARY 7.7 NONE
CVSS:4.0/AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
vuln.today AI 7.5 HIGH

Network vector with high complexity due to four required non-default conditions; PR:L confirms authenticated access; full CIA impact if arbitrary package installation achieves code execution.

3.1 AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
SUSE HIGH
Red Hat 0.0 LOW

vuln.today treats the vendor’s rating as authoritative. A higher third-party CVSS (e.g. CISA-ADP) is shown for transparency but does not drive the headline severity.

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
High
Attack Requirements
None
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

3
Analysis Updated
Aug 28, 2026 - 16:48 vuln.today
v2 - CVSS changed
CVSS changed
Aug 28, 2026 - 16:37 NVD
7.7 (HIGH)
Patch available
Aug 13, 2026 - 13:01 EUVD

DescriptionCVE.org

JupyterLab versions >=4.6.0,<=4.6.1 and <=4.5.9 contain an allowlist/blocklist enforcement gap in PyPIExtensionManager.install(). A missing 'await' caused the is_install_allowed coroutine to never execute, so the extension allowlist/blocklist check was not enforced for direct callers of install(). The stock JupyterLab HTTP API and Extension Manager UI are not affected, as they perform a separate, correctly awaited check. The issue affects only deployments where a custom extension or downstream integration imports PyPIExtensionManager and calls install() directly with a package name influenced by untrusted input, an allowlist/blocklist is configured, the PyPI Extension Manager is enabled, and kernels and terminals are disabled or delegated to remote hosts. Fixed in JupyterLab 4.6.2 and 4.5.10.

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)

Ecosystem-wide dependent count for version 4.6.0.

Executive ViewAI

Why It Matters

JupyterLab versions through 4.5.9 and 4.6.0-4.6.1 contain a vulnerability allowing authenticated users to bypass package installation restrictions in narrowly-configured deployments, potentially enabling unauthorized installation of malicious Python packages and code execution. The vulnerability affects only specific deployment configurations where allowlist or blocklist controls are explicitly enforced; standard deployments using the Extension Manager UI or HTTP API remain unaffected. Organizations should identify and patch affected JupyterLab instances to maintain package governance controls.

Business Impact: Medium
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 92% exploitable
Prevalence
High
dominant interactive data science platform across research and enterprise
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment Vendor GitHub

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 HIGH
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.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
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
Medium
Technical Impact
Partial

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

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-2026-102832 MEDIUM
4.2 Oct 13

Improper trust attribution in JupyterLab's markdownviewer:trust and notebook:trust command-link handlers lets a Trust de

CVE-2025-59842 LOW
2.1 Sep 26

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

Vendor StatusVendor

SUSE

Severity: Important
Product Status
openSUSE Tumbleweed Fixed

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