Skip to main content
CVE Vulnerability Database
Vulnerability Database/CVE-2025-30167

CVE-2025-30167: Jupyter Core Privilege Escalation Flaw

CVE-2025-30167 is a privilege escalation vulnerability in Jupyter Core on Windows systems where unauthorized users can create configuration files affecting others. This article covers technical details, affected versions, and mitigations.

Updated:

CVE-2025-30167 Overview

Jupyter Core, a foundational package providing core common functionality for Jupyter projects, contains an Uncontrolled Search Path Element vulnerability (CWE-427) in versions prior to 5.8.0 on Windows systems. The vulnerability stems from the application's use of the shared %PROGRAMDATA% directory for searching configuration files through SYSTEM_CONFIG_PATH and SYSTEM_JUPYTER_PATH. This design flaw allows unprivileged users on shared Windows systems to create malicious configuration files that affect other users, potentially leading to code execution or privilege escalation within the Jupyter environment.

Critical Impact

On shared Windows systems with multiple users and unprotected %PROGRAMDATA% directories, attackers with local access can plant malicious configuration files that execute in the context of other users running Jupyter applications.

Affected Products

  • Jupyter Core versions prior to 5.8.0
  • Windows systems with shared %PROGRAMDATA% directories
  • Multi-user Windows environments with default directory permissions

Discovery Timeline

  • 2025-06-03 - CVE CVE-2025-30167 published to NVD
  • 2025-09-08 - Last updated in NVD database

Technical Details for CVE-2025-30167

Vulnerability Analysis

This vulnerability falls under CWE-427 (Uncontrolled Search Path Element), a class of weaknesses where an application searches for critical resources using an externally-supplied search path that can point to resources outside the intended control sphere.

In the case of Jupyter Core on Windows, the application searches for configuration files in the %PROGRAMDATA% directory, which is a shared system location. By default, this directory may have overly permissive access controls that allow standard users to create files and subdirectories. When Jupyter Core loads configuration files from this location, it trusts the content without adequate verification of the file's origin or integrity.

The attack requires local access to the system and depends on the target environment having multiple users with unprotected %PROGRAMDATA% directory permissions. When these conditions are met, an attacker can create a %PROGRAMDATA%\jupyter directory structure containing malicious configuration files that will be loaded by other users when they run Jupyter applications.

Root Cause

The root cause lies in Jupyter Core's configuration file search path implementation on Windows systems. The application includes %PROGRAMDATA% as part of SYSTEM_CONFIG_PATH and SYSTEM_JUPYTER_PATH without adequately verifying the permissions or ownership of the directory. This allows any local user who can write to %PROGRAMDATA% to influence the configuration of Jupyter applications for all users on the system.

The fundamental issue is a failure to apply the principle of least privilege when determining trusted configuration file locations. On multi-user systems, shared directories should either be excluded from the search path or the application should validate that configuration files in these locations are only writable by administrators.

Attack Vector

The attack vector is local, requiring the attacker to have user-level access to a shared Windows system. The attack proceeds as follows:

  1. The attacker identifies a Windows system with Jupyter Core installed where multiple users share the system
  2. The attacker checks that %PROGRAMDATA% is writable (default on many Windows configurations)
  3. The attacker creates the %PROGRAMDATA%\jupyter directory if it doesn't exist
  4. The attacker places malicious configuration files in this directory
  5. When another user launches a Jupyter application, the malicious configuration is loaded and executed in their security context

The vulnerability requires user interaction (the victim must launch a Jupyter application) but has the potential for high impact on confidentiality, integrity, and availability of the victim's session and data.

Detection Methods for CVE-2025-30167

Indicators of Compromise

  • Unexpected files or directories created under %PROGRAMDATA%\jupyter by non-administrator users
  • Configuration files in %PROGRAMDATA%\jupyter with suspicious content or recent modification times
  • Unusual process behavior or network connections originating from Jupyter processes
  • File system audit logs showing creation of jupyter configuration files by unprivileged accounts

Detection Strategies

  • Monitor file system changes to %PROGRAMDATA%\jupyter and alert on creations by non-administrator accounts
  • Implement file integrity monitoring for Jupyter configuration directories across all search paths
  • Review Jupyter configuration file contents for suspicious entries such as startup scripts or extension configurations
  • Use endpoint detection and response (EDR) solutions to monitor process chains originating from Jupyter applications

Monitoring Recommendations

  • Enable Windows Security Auditing for Object Access on the %PROGRAMDATA% directory
  • Deploy SentinelOne agents to monitor for suspicious file system modifications in shared configuration directories
  • Implement application whitelisting to control what executables can be launched by Jupyter processes
  • Review user access patterns on shared systems to identify potential exploitation attempts

How to Mitigate CVE-2025-30167

Immediate Actions Required

  • Upgrade Jupyter Core to version 5.8.0 or later immediately on all affected systems
  • Audit %PROGRAMDATA%\jupyter directories for any unauthorized configuration files
  • Review permissions on %PROGRAMDATA% to ensure only administrators have write access
  • Implement monitoring for file system changes in shared configuration directories

Patch Information

Users should upgrade to Jupyter Core version 5.8.0 or later to receive the security patch. The fix addresses the configuration file search path handling on Windows systems. For detailed information about the vulnerability and patch, refer to the GitHub Security Advisory GHSA-33p9-3p43-82vq.

The patch can be applied by upgrading through pip:

bash
pip install --upgrade jupyter_core>=5.8.0

Workarounds

  • As administrator, modify permissions on the %PROGRAMDATA% directory to prevent unauthorized users from writing files
  • As administrator, proactively create the %PROGRAMDATA%\jupyter directory with restrictive permissions (administrator-only write access)
  • As user or administrator, set the %PROGRAMDATA% environment variable to point to a directory with appropriately restrictive permissions controlled by administrators or the current user
  • Consider running Jupyter in isolated user environments or containers to limit the impact of configuration hijacking
bash
# Example: Restrict permissions on %PROGRAMDATA%\jupyter (run as Administrator)
icacls "%PROGRAMDATA%\jupyter" /inheritance:r /grant:r "BUILTIN\Administrators:(OI)(CI)F" /grant:r "NT AUTHORITY\SYSTEM:(OI)(CI)F"

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Default Legacy - Prefooter | Experience the World’s Most Advanced Cybersecurity Platform

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.