Executive brief
JupyterLab is an interactive development environment used by data scientists and developers for coding and data analysis. A missing code statement (an "await") in the extension installation function allows attackers to bypass security controls that restrict which third-party packages can be installed, but only if custom code directly calls the vulnerable function and the deployment has specific constraints (terminals and kernels disabled). The stock JupyterLab interface is unaffected because it performs its own security check.
Technical details
The vulnerability is an improper access control and failing-open issue (CWE-284, CWE-636) in the PyPIExtensionManager.install() method. A missing 'await' keyword caused the is_install_allowed coroutine to never execute, bypassing the allowlist/blocklist enforcement for direct method callers. The stock JupyterLab HTTP API and Extension Manager UI are unaffected because they perform a separate, correctly awaited allowlist check before invoking install(). The vulnerability only impacts deployments where custom extensions or downstream integrations call install() directly with untrusted input, an allowlist/blocklist is configured, the PyPI Extension Manager is enabled, and kernels and terminals are disabled or delegated remotely. An attacker can install unauthorized packages, bypassing security policy. Fixed in JupyterLab 4.6.2 and 4.5.10.
Affected products
- JupyterLab JupyterLab >=4.6.0,<=4.6.1 and <=4.5.9
Timeline
- 2026-07-21: disclosed
- 2026-08-13: advisory
- 2026: patched: Fixed in JupyterLab 4.6.2 and 4.5.10