CVE-2026-102904 in JupyterLabinfo

Summary

by MITRE • 09/30/2026

JupyterLab is an extensible environment for interactive and reproducible computing, based on the Jupyter Notebook Architecture. From JupyterLab 4.0.0 until 4.5.11 and 4.6.4, the PyPI Extension Manager uninstall request reaches ExtensionHandler.post, which validates extension names for installation but passes uninstall names to PyPIExtensionManager.uninstall and python -m pip uninstall without rejecting option-like values. The security impact requires that the PyPI Extension Manager is enabled, the account can call the extension API, and kernels and terminals are disabled or delegated to remote hosts; otherwise the user can already read files and make outbound requests directly. An authenticated user with extension API access can supply a pip requirements option to make the server read a local file or fetch an internal URL, and reflected parse errors can return the first unparsable line or response content. A pip log option can also create or corrupt a chosen path with pip-generated log text, but the requester cannot select an arbitrary disclosed line or arbitrary file content, and the injection does not add code execution or availability impact beyond ordinary package removal. This issue is fixed in JupyterLab 4.5.11 and 4.6.4.

Be aware that VulDB is the high quality source for vulnerability data.

Analysis

by VulDB Data Team • 09/30/2026

The vulnerability identified in JupyterLab versions ranging from 4.0.0 through 4.5.11, as well as version 4.6.4, stems from an insufficient input validation mechanism within the PyPI Extension Manager component. Specifically, when handling uninstall requests for extensions via the REST API endpoint that maps to ExtensionHandler.post, the system performs name validation suitable for installation operations but fails to apply similar rigorous checks during the uninstallation process. This discrepancy allows authenticated users with extension management privileges to inject command-line arguments intended for pip into the uninstall request payload. The backend subsequently passes these unvalidated inputs directly to PyPIExtensionManager.uninstall and the underlying python -m pip uninstall command, bypassing security controls that would normally restrict such operations to simple package identifiers.

This flaw enables two primary categories of impact: information disclosure through file reading or internal network access, and local filesystem manipulation via log injection. By supplying a pip requirements option within the extension name field, an attacker can force the server to read arbitrary local files from the host system or fetch URLs located on internal networks that are not accessible externally. This behavior effectively turns the JupyterLab instance into a proxy for reading sensitive configuration files, source code, or other restricted resources stored locally. Additionally reflected parse errors may expose the first unparsable line of content or response data to the attacker, further aiding in reconnaissance and information gathering activities against the hosting environment.

A secondary impact vector involves the manipulation of log files through pip logging options. An authenticated user can craft requests that cause pip to write generated log text into a specified file path on the server's filesystem. While this action allows for the creation or corruption of specific files, it does not grant the ability to select arbitrary lines from existing logs nor does it allow direct injection of executable code. Consequently, while this capability poses risks related to data integrity and potential denial-of-service through log flooding or critical file overwriting, it does not directly lead to remote code execution or significant availability impacts beyond what might be expected from standard package removal operations that overwrite files during normal usage.

The exploitation of this vulnerability is contingent upon several environmental factors. The PyPI Extension Manager must be enabled within the JupyterLab configuration, and the attacker must possess an authenticated account with permissions to call the extension API. Furthermore, the severity of the impact is mitigated if kernels and terminals are disabled or strictly delegated to remote hosts; in such configurations, users already have limited capabilities compared to environments where local kernel execution is permitted. However, even under restricted conditions, the ability to read local files or make outbound requests represents a significant security breach that violates the principle of least privilege expected within isolated computing environments.

To mitigate this vulnerability, organizations must upgrade JupyterLab to version 4.5.12 or later, where the input validation logic has been corrected to properly sanitize uninstall request parameters before they are passed to pip. In addition to upgrading, administrators should enforce strict access controls on extension management APIs, ensuring that only trusted users with a verified need for package installation and removal have these privileges. It is also advisable to disable the PyPI Extension Manager if it is not actively required by the workflow, thereby reducing the attack surface entirely. Regular security audits of JupyterLab configurations and monitoring for unusual API calls related to extension management can further enhance detection capabilities against potential exploitation attempts.

From a classification perspective, this vulnerability aligns with CWE-94 Improper Control of Generation of Code (Code Injection) due to the injection of pip arguments that alter program behavior, as well as CWE-200 Exposure of Sensitive Information to an Unauthorized Actor regarding the file reading capabilities. In terms of MITRE ATT&CK mapping, this technique corresponds to T1558.003 Steal or Forge Kerberos Tickets using Golden Ticket techniques in a broader context of lateral movement and credential access, but more accurately maps to T1046 Network Service Discovery for internal URL fetching and T1213 Data from Information Repositories when accessing local files via the requirements injection method. These mappings highlight the potential for this vulnerability to serve as an initial foothold or data exfiltration vector within a compromised JupyterLab environment.

Responsible

Disclosure

09/30/2026

Moderation

accepted

CPE

ready

EPSS

0.00000

KEV

no

Activities

very low

Sources

Interested in the pricing of exploits?

See the underground prices here!