GHSA-WHVH-WF3X-G77J: Improper Access Control and Listing Bypass in JupyterLab Extension Manager
Vulnerability ID: GHSA-WHVH-WF3X-G77J
CVSS Score: 0.0
Published: 2026-07-22
An improper access control vulnerability in JupyterLab allows programmatic installation of blocked or non-allowed extensions. The vulnerability is caused by a missing await keyword when invoking the asynchronous checking method, leading Python to evaluate the returned coroutine object as truthy. Furthermore, the check lacks proper canonicalization of package names, enabling an attacker to bypass blocklists using casing or character variants.
TL;DR
JupyterLab's extension installation interface failed to await its blocklist checking coroutine, causing it to evaluate to True and bypass extension restrictions for direct API callers. The issue was compounded by a lack of package name normalization (PEP 503) during comparison.
Technical Details
- CWE ID: CWE-636 (Not Failing Securely / 'Failing Open')
- Attack Vector: Network
- CVSS v3.1 Score: 0.0 (Low/None due to default application routing context)
- Exploit Maturity: None (No public exploits or Proof of Concepts available)
- CISA KEV Status: Not Listed
- Affected Components: jupyterlab/extensions/pypi.py and jupyterlab/extensions/manager.py
Affected Systems
- JupyterLab server installations utilizing PyPIExtensionManager under non-default integrations
-
jupyterlab: >= 4.6.0, <= 4.6.1 (Fixed in:
4.6.2) -
jupyterlab: <= 4.5.9 (Fixed in:
4.5.10)
Code Analysis
Commit: be9303f
Fix allow/blocklist checks by awaiting is_install_allowed and canonicalizing package names
@@ -400,7 +411,7 @@
- if not self.is_install_allowed(name, version):
+ if not await self.is_install_allowed(name, version):
Commit: f1beab4
Backport fix for allowlist/blocklist checks on v4.5.x
@@ -400,7 +411,7 @@
- if not self.is_install_allowed(name, version):
+ if not await self.is_install_allowed(name, version):
Mitigation Strategies
- Upgrade the JupyterLab package to versions 4.5.10, 4.6.2, or newer.
- Configure the extension manager to run in read-only mode to prevent package installation.
- Implement static code analysis tooling to scan python code bases for unawaited coroutines.
Remediation Steps:
- Verify the currently installed version of jupyterlab via command: pip show jupyterlab.
- Update jupyterlab using pip: pip install --upgrade "jupyterlab>=4.6.2" or the equivalent conda package manager.
- If immediate patching is unavailable, edit the jupyter_server_config.py configuration file.
- Set the configuration value: c.LabApp.extension_manager = 'readonly' to disable installation capabilities.
References
- JupyterLab Security Advisory
- Pull Request 19184: Patch for JupyterLab Master
- Pull Request 19185: Patch for JupyterLab 4.6.x
- Pull Request 19186: Patch for JupyterLab 4.5.x
Read the full report for GHSA-WHVH-WF3X-G77J on our website for more details including interactive diagrams and full exploit analysis.
Top comments (0)