CVE-2026-102830: JupyterLab: Cross-site scripting (XSS) in JupyterLab via crafted language package (jupyterlab.json)
A language pack ships a Plural-Forms header saying how the language counts, for example nplurals=2; plural=(n != 1);. JupyterLab turns that string into a function with new Function, so the header gets executed. The check that meant to keep it safe was a regular expression. The regex was anchored at the start but not at the end, so it accepted any string that began with a valid plural rule and ignored everything after it.
A header such as the following passed the check, and the part after the plural rule ran in the JupyterLab page as soon as the first plural string was translated:
nplurals=2; plural=(n > 1); <anything here ran as JavaScript>
Users are affected if all of the following are true:
- they run JupyterLab 3.0.0 through 4.6.3, or an application that bundles it such as Notebook 7;
- a language pack they did not write is installed in the environment; and
- that language is selected, so its catalogue is loaded
An installation using the default English locale loads no catalogue and is not affected.
CVE assignment pending, GitHub CNA is experiencing severe backlog
References
- github.com/advisories/GHSA-3jqq-pw4j-pqcj
- github.com/jupyterlab/jupyterlab/commit/985a3223cd77fd4f991cd90066342a90711d70f6
- github.com/jupyterlab/jupyterlab/commit/de324ae91346c713c4f5e5485f97b6e914e0f774
- github.com/jupyterlab/jupyterlab/commit/f9de43dc565a1118120d466117f877a189a4ce90
- github.com/jupyterlab/jupyterlab/releases/tag/v4.5.11
- github.com/jupyterlab/jupyterlab/releases/tag/v4.6.4
- github.com/jupyterlab/jupyterlab/security/advisories/GHSA-3jqq-pw4j-pqcj
- nvd.nist.gov/vuln/detail/CVE-2026-102830
Code Behaviors & Features
Detect and mitigate CVE-2026-102830 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →