CVE-2026-102904

Description

A flaw was found in JupyterLab. When processing extension uninstallation requests, user-supplied package names are passed to the underlying package manager without properly filtering command-line options. An authenticated user with extension management access can exploit this argument injection flaw to read local server files, access internal network addresses, or overwrite files with generated log text.

Statement

A moderate-impact argument injection flaw in JupyterLab affects Red Hat OpenShift AI, which ships the vulnerable JupyterLab releases in its workbench and distributed-workload notebook images, and the Migration Toolkit for Applications 8.1 solution server image, which also ships JupyterLab. When JupyterLab processes an extension uninstallation request through the PyPI Extension Manager, the user-supplied extension name is passed to python -m pip uninstall without rejecting option-like values. An authenticated user permitted to call the extension API can exploit this to inject pip command-line options: a requirements option such as -r makes the server read a local file or fetch an internal URL, with pip's reflected parse error returning the first unparsable line and the path to the requester, and a log option such as --log can create or corrupt a chosen path with pip-generated log text. The requester cannot choose which line of a file is disclosed and cannot write content of their choosing, and the injection adds no code execution or availability impact beyond what the extension manager already permits. The issue has security implications only where 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 such users can already read the same files and make the same outbound requests directly. Red Hat rates this flaw Moderate with a CVSS 3.1 score of 5.4, matching the upstream severity. Because the impact is Moderate with a CVSS score below 7.0, fixes for the affected Red Hat OpenShift AI components are deferred, leaving a residual risk of local file disclosure, internal network probing, and pip log file corruption by authenticated users with extension API access. The affected Migration Toolkit for Applications 8.1 stream is out of support scope.

Mitigation

Upstream provides a workaround: deployments can disable programmatic extension installation and removal entirely by switching JupyterLab to the read-only extension manager, either by starting the server with the `--LabApp.extension_manager=readonly` command-line option or by setting the traitlet `c.LabApp.extension_manager = 'readonly'` in the JupyterLab configuration file. Because exploitation requires an authenticated account able to call the extension API, restricting extension API access to trusted accounts also reduces exposure. This issue is fixed upstream in JupyterLab 4.5.11 and 4.6.4; the fix for the affected Red Hat OpenShift AI components is deferred, so the read-only extension manager remains the available mitigation in the interim.

Common Vulnerability Scoring System (CVSS) Score Details

Info alert:Important note

CVSS scores for open source components depend on vendor-specific factors (e.g. version or build chain). Therefore, Red Hat's score and impact rating can be different from NVD and other vendors. Red Hat remains the authoritative CVE Naming Authority (CNA) source for its products and services (see Red Hat classifications).

The following CVSS metrics and score provided are preliminary and subject to review.

CVSS v3 Score Breakdown

Red HatNVDcve.org
Base Score5.4N/A5.4
Attack VectorNetworkN/ANetwork
Attack ComplexityLowN/ALow
Privileges RequiredLowN/ALow
User InteractionNoneN/ANone
ScopeUnchangedN/AUnchanged
ConfidentialityLowN/ALow
Integrity ImpactLowN/ALow
Availability ImpactNoneN/ANone

Vector

Red Hat: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N

cve.org: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:N

Understanding the Weakness (CWE)

Confidentiality,Integrity,Availability,Other

Technical Impact: Execute Unauthorized Code or Commands; Alter Execution Logic; Read Application Data; Modify Application Data

If an attacker can provide an untrusted input that contains argument-separating delimiters, then the resulting command will have more arguments than intended by the developer, potentially changing the expected behavior of the command. Depending on the functionality supported by the extraneous arguments, this may have security-relevant consequences. The attacker could include arguments that allow unintended commands or code to be executed, allow sensitive data to be read or modified, or cause other unintended behavior.

Frequently Asked Questions

Want to get errata notifications? Sign up here.