HIGH 7.1

CVE-2026-54528: JupyterLab Git Path-Casing Bypass in Excluded Paths (CVSS 7.1)

JupyterLab Git, a popular Git integration extension for JupyterLab notebooks, contains a path-matching flaw that allows authenticated users to bypass access restrictions on sensitive directories. By slightly altering the capitalization of URLs on case-insensitive filesystems (like Windows or macOS), an attacker can read files that administrators intended to exclude from access. This affects versions before 0.54.0 and requires authentication but no user interaction to exploit.

Source data · NVD / CISA · public domain

CVSS
3.1 · 7.1 HIGH · CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N
Weaknesses (CWE)
CWE-178
Affected products
1 configuration(s)
Published / Modified
2026-07-08 / 2026-07-15

NVD description (verbatim)

JupyterLab Git is a Git extension for JupyterLab. Prior to 0.54.0, jupyterlab-git uses fnmatch.fnmatchcase() in GitHandler.prepare() in jupyterlab_git/handlers.py to enforce excluded_paths, allowing an authenticated user on a case-insensitive filesystem to vary URL path casing and read excluded directories. This issue is fixed in version 0.54.0.

4 reference(s) · View on NVD →

SEC.co analysis · AI-assisted, reviewed against source

Technical summary

The vulnerability resides in the GitHandler.prepare() method within jupyterlab_git/handlers.py, which uses Python's fnmatch.fnmatchcase() function to validate requested paths against an excluded_paths list. Because fnmatchcase() is case-sensitive while many operating system filesystems are case-insensitive, an attacker can construct requests with different path casing to circumvent the exclusion filter. For example, if '/sensitive/path' is excluded, a request for '/Sensitive/path' or '/SENSITIVE/path' may bypass the filter on case-insensitive systems. An authenticated user can leverage this to access restricted git repositories or configuration directories.

Business impact

Organizations using JupyterLab Git for collaborative data science or MLOps workflows face unauthorized disclosure of repository contents, including proprietary code, configuration secrets, or research data. The impact is limited to authenticated users but can be significant if JupyterLab instances are accessible to contractors, students, or other non-privileged users. This could lead to intellectual property theft, compliance violations if sensitive data is exposed, or lateral movement if repository credentials are discovered.

Affected systems

Jupyter jupyterlab-git versions prior to 0.54.0 are affected. The vulnerability is most exploitable on case-insensitive filesystems including Windows (NTFS) and macOS (APFS/HFS+), though case-sensitive systems like Linux are not immune if path normalization is incomplete. Any deployment of JupyterLab with the Git extension enabled and excluded_paths configured for access control should be considered at risk if running a vulnerable version.

Exploitability

Exploitation requires valid authentication credentials to access the JupyterLab instance—there is no unauthenticated vector. However, the attack surface is broad for environments with many users (universities, shared research platforms, multi-tenant data science services). No user interaction is required; an attacker simply needs to craft HTTP requests with altered path casing. The technique is trivial to execute and low-cost to discover; any user familiar with case-insensitive filesystem behavior could identify and exploit this without advanced tools. CVSS 7.1 (HIGH) reflects high confidentiality impact but lower integrity risk.

Remediation

Upgrade jupyterlab-git to version 0.54.0 or later, which implements case-insensitive path matching for the excluded_paths validation. Before patching, organizations should audit JupyterLab access logs to identify whether path-casing variations have been used against excluded directories, and review who has authentication access to JupyterLab instances. Consider restricting JupyterLab network access to trusted networks or using additional authentication layers (e.g., SSO, IP allowlisting) until patching is complete.

Patch guidance

JupyterLab-git version 0.54.0 includes the fix and should be deployed to all affected environments. Verify the patch version in the JupyterLab package manager or environment configuration (e.g., pip list | grep jupyterlab-git or conda list jupyterlab-git). Testing in a non-production environment is recommended before rolling out to shared JupyterLab deployments. If using containerized deployments, rebuild images with the updated package and redeploy. No configuration changes are required post-update; the fix is transparent to users.

Detection guidance

Monitor HTTP access logs for suspicious patterns: repeated requests to excluded directories with varying path casing (e.g., /git/sensitive, /GIT/sensitive, /Git/sensitive). Look for 200 OK responses to excluded paths that should return 403 Forbidden. Audit authentication logs for users accessing JupyterLab who should not have access. If your JupyterLab instance runs on case-sensitive filesystems (Linux), risk is lower but still present; check for any path normalization gaps in your deployment. Enable debug logging in jupyterlab-git handlers to capture which paths are being requested and evaluated.

Why prioritize this

This vulnerability should be prioritized for patching due to its HIGH severity, direct impact on data confidentiality, and low attack complexity. Exploitation requires only valid credentials—an internal threat or compromised low-privilege account can access excluded repositories without detection. The fix is simple and non-disruptive, making this a high-value, low-risk remediation. Organizations with multi-user or shared JupyterLab deployments should treat this as critical.

Risk score, explained

CVSS 7.1 (HIGH) reflects: (1) High confidentiality impact—unrestricted read access to excluded directories; (2) Low integrity impact—the vulnerability does not enable file modification; (3) No availability impact; (4) Low attack complexity and low privilege requirement, since authentication is required but widely distributed in shared environments; (5) Network-based vector. The score appropriately captures the risk of unauthorized information disclosure while acknowledging that direct compromise of system integrity or availability is not possible through this flaw alone.

Frequently asked questions

Will my case-sensitive Linux systems be affected?

Linux filesystems are typically case-sensitive, so fnmatch.fnmatchcase() will reject path-casing variations. However, the fix in 0.54.0 ensures case-insensitive matching is used universally, improving defense-in-depth. Patch regardless of your OS, especially if you use containerized or hybrid deployments.

Do I need to reset passwords or revoke tokens after patching?

Not necessarily, unless you have evidence of exploitation in your logs. The vulnerability allows reading excluded paths, not credential theft. However, if you discovered unauthorized access to sensitive repositories, treat it as a potential breach and rotate any secrets found in those repositories.

What if I have custom excluded_paths configurations?

The fix applies to all excluded_paths regardless of what you've configured. Review your excluded_paths settings post-patch to ensure they reflect your actual security requirements, but no changes are forced by the update.

Can users exploit this against each other, or only against the repository?

The vulnerability targets Git repositories and configuration accessible via the JupyterLab Git handler. It allows one authenticated user to bypass intended restrictions on what repositories or directories another user has set as excluded. In a shared environment, any authenticated user can attempt exploitation.

This analysis is based on the CVE record and vendor information as of the publish date. SEC.co does not guarantee the completeness or accuracy of external references. Readers should verify patch availability and compatibility with their environment using the Jupyter project's official advisory and release notes before deployment. Exploitation requires valid authentication; assess your JupyterLab access controls independently. For proprietary or custom deployments, consult with your vendor or internal security team regarding applicability. Source: NVD (public-domain), retrieved 2026-08-17. Analysis generated by SEC.co (claude-haiku-4-5).