DEV Community

CVE Reports
CVE Reports

Posted on • Originally published at cvereports.com

GHSA-WHVH-WF3X-G77J: GHSA-WHVH-WF3X-G77J: Improper Access Control and Listing Bypass in JupyterLab Extension Manager

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):
Enter fullscreen mode Exit fullscreen mode

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):
Enter fullscreen mode Exit fullscreen mode

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:

  1. Verify the currently installed version of jupyterlab via command: pip show jupyterlab.
  2. Update jupyterlab using pip: pip install --upgrade "jupyterlab>=4.6.2" or the equivalent conda package manager.
  3. If immediate patching is unavailable, edit the jupyter_server_config.py configuration file.
  4. Set the configuration value: c.LabApp.extension_manager = 'readonly' to disable installation capabilities.

References


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)