{"id":"GHSA-37w4-hwhx-4rc4","summary":"JupyterLab has an Extension Manager API/GUI Policy Discrepancy, allowing 3rd party (malicious) extensions install via POST request","details":"The allow-list of extensions that can be installed from PyPI Extension Manager (`allowed_extensions_uris`) is not correctly enforced by JupyterLab prior to 4.5.7. The PyPI Extension Manager was not contained to packages listed on the default PyPI index.\n\nThis has security implications for deployments that:\n- have allow-listed specific extensions with aim to prevent users from installing packages\n- have the kernel and terminals disabled or delegated to remote hosts (thus no access to install packages in the single-user server environment)\n- have multi-tenant deployments that is not configured for untrusted users (as per documented on JupyterHub https://jupyterhub.readthedocs.io/en/5.2.1/explanation/websecurity.html)\n- have the (default) PyPI Extension Manager enabled\n\n### Impact\n\nAn authenticated attacker - such as a student in a shared JupyterHub environment or a user in a multi-tenant JupyterLab deployment - can escalate their privileges. This might allow for data exfiltration, lateral movement within the network, and persistent compromise of the server infrastructure.\n\n### Patches\n\nJupyterLab [`v4.5.7`](https://github.com/jupyterlab/jupyterlab/releases/tag/v4.5.7) contains the patch.\n\nUsers of applications that depend on JupyterLab, such as Notebook v7+, should update `jupyterlab` package too.\n\n### Workarounds\n\nSwitch to read-only extension manager by adding the following command line option:\n\n```bash\n--LabApp.extension_manager=readonly\n```\n\nor the following traitlet:\n\n```python\nc.LabApp.extension_manager = 'readonly'\n```\n\nYou can confirm that the read-only manager is in use from GUI:\n\n\u003cimg width=\"293\" height=\"293\" alt=\"image\" src=\"https://github.com/user-attachments/assets/8016c809-633e-4ed0-a5bc-6bc4793caa0f\" /\u003e\n\nNote: configuration of a PyPI proxy with allow-listed packages is not sufficient to protect from this vulnerability.\n\n### References\n\n- allow-list https://jupyterlab.readthedocs.io/en/stable/user/extensions.html#listing-configuration\n- https://jupyterhub.readthedocs.io/en/5.2.1/explanation/websecurity.html\n- https://jupyterlab.readthedocs.io/en/latest/user/extensions.html#extension-manager-implementations","aliases":["BIT-jupyterlab-2026-42266","CVE-2026-42266","PYSEC-2026-164"],"modified":"2026-07-17T21:04:48.326655327Z","published":"2026-05-05T20:53:18Z","database_specific":{"github_reviewed":true,"github_reviewed_at":"2026-05-05T20:53:18Z","nvd_published_at":"2026-05-13T16:16:47Z","cwe_ids":["CWE-20","CWE-602","CWE-88"],"severity":"HIGH"},"references":[{"type":"WEB","url":"https://github.com/jupyterlab/jupyterlab/security/advisories/GHSA-37w4-hwhx-4rc4"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-42266"},{"type":"PACKAGE","url":"https://github.com/jupyterlab/jupyterlab"},{"type":"WEB","url":"https://github.com/jupyterlab/jupyterlab/releases/tag/v4.5.7"},{"type":"WEB","url":"https://github.com/pypa/advisory-database/tree/main/vulns/jupyterlab/PYSEC-2026-164.yaml"},{"type":"WEB","url":"https://jupyterhub.readthedocs.io/en/5.2.1/explanation/websecurity.html"},{"type":"WEB","url":"https://jupyterlab.readthedocs.io/en/latest/user/extensions.html#extension-manager-implementations"}],"affected":[{"package":{"name":"jupyterlab","ecosystem":"PyPI","purl":"pkg:pypi/jupyterlab"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"4.0.0"},{"fixed":"4.5.7"}]}],"versions":["4.0.0","4.0.1","4.0.10","4.0.11","4.0.12","4.0.13","4.0.2","4.0.3","4.0.4","4.0.5","4.0.6","4.0.7","4.0.8","4.0.9","4.1.0","4.1.0a1","4.1.0a2","4.1.0a3","4.1.0a4","4.1.0b0","4.1.0b1","4.1.0b2","4.1.0rc0","4.1.0rc1","4.1.1","4.1.2","4.1.3","4.1.4","4.1.5","4.1.6","4.1.7","4.1.8","4.2.0","4.2.0a0","4.2.0a1","4.2.0a2","4.2.0b0","4.2.0b1","4.2.0b2","4.2.0b3","4.2.0rc0","4.2.1","4.2.2","4.2.3","4.2.4","4.2.5","4.2.6","4.2.7","4.3.0","4.3.0a0","4.3.0a1","4.3.0a2","4.3.0b0","4.3.0b1","4.3.0b2","4.3.0b3","4.3.0rc0","4.3.0rc1","4.3.1","4.3.2","4.3.3","4.3.4","4.3.5","4.3.6","4.3.7","4.3.8","4.4.0","4.4.0a0","4.4.0a1","4.4.0a2","4.4.0a3","4.4.0b0","4.4.0b1","4.4.0b2","4.4.0rc0","4.4.0rc1","4.4.1","4.4.10","4.4.2","4.4.3","4.4.4","4.4.5","4.4.6","4.4.7","4.4.8","4.4.9","4.5.0","4.5.0a0","4.5.0a1","4.5.0a2","4.5.0a3","4.5.0a4","4.5.0b0","4.5.0b1","4.5.0rc0","4.5.0rc1","4.5.1","4.5.2","4.5.3","4.5.4","4.5.5","4.5.6"],"database_specific":{"source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/05/GHSA-37w4-hwhx-4rc4/GHSA-37w4-hwhx-4rc4.json","last_known_affected_version_range":"\u003c= 4.5.6"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H"}]}