#1144343 jupyterlab: CVE-2026-73627 CVE-2026-73626 CVE-2026-73415 CVE-2026-67338

Package:
src:jupyterlab
Source:
src:jupyterlab
Submitter:
Salvatore Bonaccorso
Date:
2026-08-16 11:57:03 UTC
Severity:
normal
Tags:
#1144343#5
Date:
2026-08-14 06:57:07 UTC
From:
To:
Hi,

The following vulnerabilities were published for jupyterlab.

Can you  help properly asses isolating the fixing commits needed.

CVE-2026-73627[0]:
| JupyterLab (pip package 'jupyterlab') versions >=4.1.0,<=4.5.9 and
| >=4.6.0,<=4.6.1 contain a plugin manager lock-rule enforcement
| bypass. Two server-side enforcement gaps allow an authenticated user
| to circumvent administrator lock rules by making direct requests to
| the /lab/api/plugins endpoint, enabling or disabling plugins that
| were locked — including child plugins of multi-plugin extensions and
| plugins locked via the 'lock all' mechanism. This can impact data
| integrity and bypass hardening or restrictions (e.g.,
| download/upload limits) implemented through locked plugins. Fixed in
| versions 4.6.2 and 4.5.10.


CVE-2026-73626[1]:
| JupyterLab versions >=4.6.0,<=4.6.1 and <=4.5.9 contain an
| allowlist/blocklist enforcement gap in
| PyPIExtensionManager.install(). A missing 'await' caused the
| is_install_allowed coroutine to never execute, so the extension
| allowlist/blocklist check was not enforced for direct callers of
| install(). The stock JupyterLab HTTP API and Extension Manager UI
| are not affected, as they perform a separate, correctly awaited
| check. The issue affects only deployments where a custom extension
| or downstream integration imports PyPIExtensionManager and calls
| install() directly with a package name influenced by untrusted
| input, an allowlist/blocklist is configured, the PyPI Extension
| Manager is enabled, and kernels and terminals are disabled or
| delegated to remote hosts. Fixed in JupyterLab 4.6.2 and 4.5.10.


CVE-2026-73415[2]:
| jupyterlab is an extensible environment for interactive and
| reproducible computing, based on the Jupyter Notebook Architecture.
| Prior to 4.5.10 and 4.6.2, in packages/imageviewer/src/widget.ts,
| JupyterLab's ImageViewer uses URL.createObjectURL for a specially
| crafted SVG image and revokes the blob URL too early, allowing the
| image to retain an executable same-origin context when it is opened
| through the image viewer and then opened in a new browser tab. The
| resulting cross-site scripting can be used to execute arbitrary code
| on the JupyterLab server. This issue is fixed in versions 4.5.10 and
| 4.6.2.


CVE-2026-67338[3]:
| JupyterLab before 4.5.9 contains a stored cross-site scripting
| vulnerability in the Extension Manager that fails to validate URI
| protocols in package metadata URLs. Attackers can publish malicious
| PyPI packages with javascript: URLs in project metadata that execute
| arbitrary JavaScript in the JupyterLab origin when users click the
| extension name.


If you fix the vulnerabilities please also make sure to include the
CVE (Common Vulnerabilities & Exposures) ids in your changelog entry.

For further information see:

[0] https://security-tracker.debian.org/tracker/CVE-2026-73627
https://www.cve.org/CVERecord?id=CVE-2026-73627
[1] https://security-tracker.debian.org/tracker/CVE-2026-73626
https://www.cve.org/CVERecord?id=CVE-2026-73626
[2] https://security-tracker.debian.org/tracker/CVE-2026-73415
https://www.cve.org/CVERecord?id=CVE-2026-73415
[3] https://security-tracker.debian.org/tracker/CVE-2026-67338
https://www.cve.org/CVERecord?id=CVE-2026-67338

Regards,
Salvatore

#1144343#10
Date:
2026-08-16 11:54:37 UTC
From:
To:
We believe that the bug you reported is fixed in the latest version of
jupyterlab, which is due to be installed in the Debian FTP archive.

A summary of the changes between this version and the previous one is
attached.

Thank you for reporting the bug, which will now be closed.  If you
have further comments please address them to 1144343@bugs.debian.org,
and the maintainer will reopen the bug report if appropriate.

Debian distribution maintenance software
pp.
Bastien Roucariès <rouca@debian.org> (supplier of updated jupyterlab package)

(This message was generated automatically at their request; if you
believe that there is a problem with it please contact the archive
administrators by mailing ftpmaster@ftp-master.debian.org)
Format: 1.8
Date: Sun, 16 Aug 2026 13:18:21 +0200
Source: jupyterlab
Architecture: source
Version: 4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4-4
Distribution: unstable
Urgency: high
Maintainer: Debian Javascript Maintainers <pkg-javascript-devel@lists.alioth.debian.org>
Changed-By: Bastien Roucariès <rouca@debian.org>
Closes: 1144343
Changes:
 jupyterlab (4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4-4) unstable; urgency=high
 .
   [ Alexandre Detiste ]
   * Salsa CI: test the nocheck profile
 .
   [ Xavier Guimard ]
   * Declare compliance with policy 4.7.4
   * Drop "Rules-Requires-Root: no"
   * Drop "Priority: optional"
   * Fix build with typescript 6
 .
   [ Bastien Roucariès ]
   * Security fixes (Closes: #1144343)
   * Fix CVE-2026-67338:
     Jupyterlab contains a stored cross-site scripting vulnerability
     in the Extension Manager that fails to validate URI protocols in
     package metadata URLs. Attackers can publish malicious PyPI packages
     with javascript: URLs in project metadata that execute arbitrary
     JavaScript in the JupyterLab origin when users click the extension name.
   * Fix CVE-2026-73415:
     In packages/imageviewer/src/widget.ts, JupyterLab's ImageViewer
     uses URL.createObjectURL for a specially crafted SVG image and
     revokes the blob URL too early, allowing the image to retain
     an executable same-origin context when it is opened through
     the image viewer and then opened in a new browser tab.
     The resulting cross-site scripting can be used to execute
     arbitrary code on the JupyterLab server
   * Fix CVE-2026-73416:
     jupyterlab/extensions/manager.py and jupyterlab/extensions/pypi.py,
     JupyterLab's PyPI extension manager enforces blocked_extensions_uris
     by comparing requested install names to blocklist entries with custom
     normalization that is weaker than PyPI package-name canonicalization.
     An authenticated user can request a PyPI-equivalent spelling such as
     JupyterLab.Git for a blocklisted package such as jupyterlab-git,
     and JupyterLab accepts the install request even
     though pip resolves the variant to the same package.
     Security impact requires an allowlist or blocklist intended
     to restrict package installation, the PyPI Extension Manager, and kernels
     and terminals that are disabled or delegated to remote hosts.
     The bypass lets an authenticated
     user install a prohibited extension, defeat integrity restrictions,
     and affect availability without gaining new read access.
   * Fix CVE-2026-73417:
     JupyterLab allows notebook settings to be shared and applied through an
     overrides.json file using the Import button in the Settings Editor.
     In packages/notebook-extension/schema/tracker.json and
     packages/notebook-extension/src/index.ts, the sideBySideLeftMarginOverride
     and sideBySideRightMarginOverride settings are not properly
     validated before being inserted into style content, allowing
     a crafted settings file to contain instructions that execute as code
     instead of only changing display preferences. A user can import the
     malicious file, or an attacker with access to a shared settings
     location can plant an overrides.json that is applied automatically.
     The embedded code runs with the affected user's access and can read
     or modify notebooks and files and run code through the notebook server,
     including on a connected kernel.
   * Fix CVE-2026-73626:
     A missing 'await' caused the is_install_allowed coroutine to never
     execute, so the extension allowlist/blocklist check was not enforced
     for direct callers of install(). The stock JupyterLab HTTP API and
     Extension Manager UI are not affected, as they perform a separate,
     correctly awaited check.
   * Fix CVE-2026-73627:
     A plugin manager lock-rule enforcement bypass.
     Two server-side enforcement gaps allow an authenticated user to
     circumvent administrator lock rules by making direct requests to the
     /lab/api/plugins endpoint, enabling or disabling plugins that were locked,
     including child plugins of multi-plugin extensions and plugins locked
     via the 'lock all' mechanism.
Checksums-Sha1:
 f234539dc2c2390cb91e2ae60f5aaafcfb7a1e88 6811 jupyterlab_4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4-4.dsc
 eb34b3ea64ee87b0a73937bf0bae5cc72ba81777 1597928 jupyterlab_4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4.orig-jupyter-ui-toolkit.tar.xz
 1f0180cf4cbc9d9ffd840133870eb8b7a7be7b2b 97376 jupyterlab_4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4.orig-jupyter-ydoc.tar.xz
 76cbeff51ac6b13ca1e7199e40846e205e280ff9 4780 jupyterlab_4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4.orig-mini-svg-data-uri.tar.xz
 a561c423a97624071c09945c29ae2bb807b40ef2 19641464 jupyterlab_4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4.orig.tar.xz
 a30b319fd07dea1ce34a882c3e64d770ed7cb2c7 44460 jupyterlab_4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4-4.debian.tar.xz
 d66b0381cd356832352bfcbfeb8dac1322016c35 28084 jupyterlab_4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4-4_source.buildinfo
Checksums-Sha256:
 5ac1552806564580c0f0f03a762152086f9428ef0029b0e768cdf93f8c86b027 6811 jupyterlab_4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4-4.dsc
 a5eabc67c064e96bf431307d48b7f5fd8bd4fe32156a270c4b07aee4607ca828 1597928 jupyterlab_4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4.orig-jupyter-ui-toolkit.tar.xz
 8afd6186534f2cb6037103c1101211cc6cf21ecf735923157957adb474887784 97376 jupyterlab_4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4.orig-jupyter-ydoc.tar.xz
 54bf2f94b9809e10224766d91e9c778cada0f7e07fda42f3071002d6fa010cc7 4780 jupyterlab_4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4.orig-mini-svg-data-uri.tar.xz
 cb8948247270001f997aa278b44283d0854d83a657bf5b2431b955d9ee804de1 19641464 jupyterlab_4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4.orig.tar.xz
 090f7d0e0558893fd988b3d77a99c4977230e1940d3ac7588c1725303a2d3db2 44460 jupyterlab_4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4-4.debian.tar.xz
 84413e35abe0cba29376c051e7ca3dee1ae977c2c946494582233e15f65c396a 28084 jupyterlab_4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4-4_source.buildinfo
Files:
 6e94e74c337d441ae05287c72a414dd6 6811 javascript optional jupyterlab_4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4-4.dsc
 52848eb1b1e253029383dc18606526d1 1597928 javascript optional jupyterlab_4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4.orig-jupyter-ui-toolkit.tar.xz
 a65317257cd84125c53cbbf15381fbd1 97376 javascript optional jupyterlab_4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4.orig-jupyter-ydoc.tar.xz
 bb699f5f37e7bcae34413fd523a58559 4780 javascript optional jupyterlab_4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4.orig-mini-svg-data-uri.tar.xz
 5ba8b17523e2a071860b3e9a5b8b482c 19641464 javascript optional jupyterlab_4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4.orig.tar.xz
 fcad78eae067bbffbc9659567cc887b9 44460 javascript optional jupyterlab_4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4-4.debian.tar.xz
 6ee99461e3fd9820f3291daef3f24008 28084 javascript optional jupyterlab_4.4.10+ds1+~3.1.0+~0.16.6+~cs1.4.4-4_source.buildinfo
-----BEGIN PGP SIGNATURE-----

wsG6BAEBCgBvBYJqgZzFCRAAOhotqkEIX0cUAAAAAAAeACBzYWx0QG5vdGF0aW9u
cy5zZXF1b2lhLXBncC5vcmeb3JZwexY7XNV9mXHJJN6V1Vm2WD1kytdIS5AL1CcX
sRYhBF0Bh7lAokW617D1agA6Gi2qQQhfAABVdQ/zB7iycUYrU+FhkftB0VKyPM8s
itMgCAMyFxQw/1v9m7cyvq4F320R3o+hUdPi7Xml3NbwoVk0Yq9OjXubBQDks5cT
MopqVpgxUt5dC5RAGacvhUFcp8nX92eKBwTR/JgaU/hblp7M2gRhvvXB6KWMM62i
4h/M5SioneROYozcfxVYGSQVwAfSH45kuHuP17yMxErRO7n91duZ2PHb5Uq8lpEn
5Lm0CURFvP9bjlBX8MoZEqxjxFwHmUHzdpnz4Ub8TGL1+QLLji1lGOxNesVTW3n5
efeCZe1wn3TxGYJiHIUSL+VTMpRZqhC/NhKcwfdwgwRt6qRHydfRjv9O7c9M4c9L
nbM8qerWH5w/sU6Wi2gmEmq/J24x+ktFdntM0mVOHQtlfT+OoOmg8bCWFktz9kz+
p5+8JVgr8hTXJhntQ8aGxhNARBEnt+qEmZql5f1u5gHyoSi+8ISdCJGHR+pajm6l
P/mf4jJamCRWUYQVC4ZzWXmlEvtAx3jgrNRx4POWA73twUMmkuvIGIHAr9vV8Up0
YeQnYhECwXMPyS3ANjsmWma6HkhijJElGmJmuwuR0jnuo2TA8EhG8mmtd+e0uTEw
adbvXmbcsf096rEBOCZveC2ymJUwVcB3dPNyU6teDQKsnxY+7ELI8OQ/QfdGSgsm
Mml7K7ZZmKVl1z12iw==
=Rpkc
-----END PGP SIGNATURE-----