VYPR
High severity7.4NVD Advisory· Published Apr 3, 2025· Updated Apr 15, 2026

CVE-2025-30370

CVE-2025-30370

Description

jupyterlab-git is a JupyterLab extension for version control using Git. On many platforms, a third party can create a Git repository under a name that includes a shell command substitution string in the syntax $(<command>). These directory names are allowed in macOS and a majority of Linux distributions. If a user starts jupyter-lab in a parent directory of this inappropriately-named Git repository, opens it, and clicks "Git > Open Git Repository in Terminal" from the menu bar, then the injected command <command> is run in the user's shell without the user's permission. This issue is occurring because when that menu entry is clicked, jupyterlab-git opens the terminal and runs cd <git-repo-path> through the shell to set the current directory. Doing so runs any command substitution strings present in the directory name, which leads to the command injection issue described here. A previous patch provided an incomplete fix. This vulnerability is fixed in 0.51.1.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
jupyterlab-gitPyPI
< 0.51.10.51.1

Patches

2
b46482993f76

Merge commit from fork

https://github.com/jupyterlab/jupyterlab-gitDavid L. QiuApr 3, 2025via ghsa
1 file changed · +6 24
  • src/commandsAndMenu.tsx+6 24 modified
    @@ -164,31 +164,13 @@ export function addCommands(
         label: trans.__('Open Git Repository in Terminal'),
         caption: trans.__('Open a New Terminal to the Git Repository'),
         execute: async args => {
    -      const main = (await commands.execute(
    -        'terminal:create-new',
    -        args
    -      )) as MainAreaWidget<ITerminal.ITerminal>;
    +      const cwd = gitModel.pathRepository;
    +      const main = (await commands.execute('terminal:create-new', {
    +        ...args,
    +        cwd
    +      })) as MainAreaWidget<ITerminal.ITerminal>;
     
    -      try {
    -        if (gitModel.pathRepository !== null) {
    -          const terminal = main.content;
    -          terminal.session.send({
    -            type: 'stdin',
    -            content: [
    -              `cd "${gitModel.pathRepository
    -                .split('"')
    -                .join('\\"')
    -                .split('`')
    -                .join('\\`')}"\n`
    -            ]
    -          });
    -        }
    -
    -        return main;
    -      } catch (e) {
    -        console.error(e);
    -        main.dispose();
    -      }
    +      return main;
         },
         isEnabled: () =>
           gitModel.pathRepository !== null &&
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

6

News mentions

0

No linked articles in our index yet.