
Cloud Vulnerability DB
A community-led vulnerabilities database
CVE-2026-73416 is a PyPI extension blocklist package-name canonicalization bypass vulnerability in JupyterLab that allows authenticated users to circumvent administrator-configured allow/blocklists for extension installation. The flaw exists in jupyterlab/extensions/manager.py and jupyterlab/extensions/pypi.py, where the extension manager uses a custom string normalization weaker than PyPI's canonical package-name normalization. Affected versions are JupyterLab >= 4.5.0 and < 4.5.10, and >= 4.6.0 and < 4.6.2. It was reported by researcher rexpository, remediated by krassowski, and published on July 21, 2026 (CVE assigned August 13, 2026). It carries a CVSS v4.0 base score of 6.1 (Medium) (GitHub Advisory).
The root cause is classified under CWE-178 (Improper Handling of Case Sensitivity) and CWE-180 (Incorrect Behavior Order: Validate Before Canonicalize). JupyterLab's _is_allowed_by_listing() method in manager.py called _normalize_name() — a weaker custom normalization — instead of PyPI's canonical canonicalize_name() function when comparing a requested package name against blocklist/allowlist entries. This meant that PyPI-equivalent spellings such as JupyterLab.Git, JupyterLab-Git, or jupyterlab_git for a blocklisted package like jupyterlab-git would pass the check, since pip resolves all variants to the same package. Additionally, is_install_allowed() was called without await in the install() method, meaning the check was not properly enforced. Exploitation requires: (1) an active allow/blocklist policy, (2) the default PyPI Extension Manager enabled, and (3) kernels and terminals disabled or delegated to remote hosts (GitHub Advisory, Patch PR).
Successful exploitation allows an authenticated user to install a package that an operator specifically intended to block, defeating the allowlist/blocklist access control. Since JupyterLab extensions can execute arbitrary code within the single-user server context, this enables untrusted users to impact the integrity and availability of their provisioned jupyter-server instance — for example, circumventing download/upload limits or other hardened restrictions. Confidentiality impact is limited (Low), as the user already has access to their own server's data and installing an extension grants no new read access. In JupyterHub deployments, availability impact is bounded to the user's own kernel pod, though resource exhaustion could potentially degrade shared resources where limits are absent (GitHub Advisory).
No public proof-of-concept exploit code or in-the-wild exploitation has been reported for this vulnerability. The EPSS score is 0.0, and it is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog. Exploitation requires authenticated access and a specific deployment configuration (active blocklist/allowlist, PyPI Extension Manager enabled, kernels/terminals restricted), which limits the practical attack surface (GitHub Advisory).
jupyterlab-git) by attempting a standard install and observing the denial response.JupyterLab.Git, JupyterLab-Git, or jupyterlab_git (using dots, mixed case, or underscores instead of hyphens).JupyterLab.Git).JupyterLab.Git, JupyterLab-Git, jupyterlab_git) for packages that should be blocked; successful install confirmations for packages on the configured blocklist.site-packages directory that correspond to blocklisted packages; new or modified files in the JupyterLab extensions directory.pypi.org) to download packages with variant name spellings that resolve to blocklisted packages.Upgrade JupyterLab to version 4.5.10 or 4.6.2 (or later), which replace the weak _normalize_name() with PyPI's canonical canonicalize_name() function and fix the missing await on is_install_allowed(). Users of dependent applications such as Notebook v7+ should also update the jupyterlab package. As an immediate workaround for deployments that do not require programmatic extension installation, switch to the read-only extension manager via --LabApp.extension_manager=readonly or by setting c.LabApp.extension_manager = 'readonly' in the traitlets configuration. No action is required for deployments without a custom allow/blocklist configured (GitHub Advisory, Patch PR).
The vulnerability was reported by researcher rexpository and remediated by JupyterLab maintainer krassowski, who noted a slight departure from the normal coordinated disclosure process due to GitHub private forks being broken at the time of the fix. The patch was bundled with fixes for four other JupyterLab security advisories (GHSA-gx64-gj6p-pc4c, GHSA-h5v5-8746-g7mm, GHSA-pppj-hq3g-57pj, GHSA-whvh-wf3x-g77j) in a single security release on July 21, 2026. No significant broader media coverage or social media discussion has been identified (GitHub Advisory, Patch PR).
Source: This report was generated using AI
Free Vulnerability Assessment
Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.
Get a personalized demo
"Best User Experience I have ever seen, provides full visibility to cloud workloads."
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
"We know that if Wiz identifies something as critical, it actually is."