fix(deps): update dependency simple-git to v3.36.0 [security]#188
Open
renovate[bot] wants to merge 1 commit into
Open
fix(deps): update dependency simple-git to v3.36.0 [security]#188renovate[bot] wants to merge 1 commit into
renovate[bot] wants to merge 1 commit into
Conversation
ba74c04 to
b847abe
Compare
b847abe to
42d6328
Compare
42d6328 to
a9a4369
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
3.32.1→3.36.0simple-git has blockUnsafeOperationsPlugin bypass via case-insensitive protocol.allow config key enables RCE
CVE-2026-28292 / GHSA-r275-fr43-pm7q
More information
Details
Summary
The
blockUnsafeOperationsPlugininsimple-gitfails to block git protocoloverride arguments when the config key is passed in uppercase or mixed case.
An attacker who controls arguments passed to git operations can enable the
ext::protocol by passing-c PROTOCOL.ALLOW=always, which executes anarbitrary OS command on the host machine.
Details
The
preventProtocolOverridefunction insimple-git/src/lib/plugins/block-unsafe-operations-plugin.ts(line 24)checks whether a
-cargument configuresprotocol.allowusing this regex:This regex is case-sensitive. Git treats config key names
case-insensitively — it normalises them to lowercase internally.
As a result, passing
PROTOCOL.ALLOW=always,Protocol.Allow=always,or any mixed-case variant is not matched by the regex, the check
returns without throwing, and git is spawned with the unsafe argument.
Verification that git normalises the key:
$ git -c PROTOCOL.ALLOW=always config --list | grep protocol protocol.allow=alwaysThe fix is a single character — add the
/iflag:poc.js
Test Results
Vector 1 — Original CVE-2022-25912 (
protocol.ext.allow=always, lowercase)Result: BLOCKED ✅
The original Snyk PoC payload using lowercase
protocol.ext.allow=alwaysis correctly intercepted bypreventProtocolOverridebefore git is invoked. AGitPluginErroris thrown immediately and the sentinel file is never created.Output:
Vector 2 — Uppercase bypass (
PROTOCOL.ALLOW=always)Result: BYPASSED⚠️ — RCE confirmed
The
preventProtocolOverrideregex/^\s*protocol(.[a-z]+)?.allow/is case-sensitive.PROTOCOL.ALLOW=always(uppercase) passes the check without error. Git normalises config key names to lowercase internally, enabling theext::protocol. The injected shell command executes before git errors on the missing repository stream.Output:
/tmp/pwn-codeantwas created by the git subprocess — command execution confirmed.Vector 3 — Real-world scenario (target:
https://github.com/CodeAnt-AI/codeant-quality-gates)Result: BYPASSED⚠️ — RCE confirmed
An application passes user-controlled
customArgstosimpleGit().clone(). The attacker injectsPROTOCOL.ALLOW=alwaysand substitutes a maliciousext::URL in place of the intended repository URL. The plugin does not block the uppercase variant; git enablesext::and executes the payload before the application can detect the failure.Output:
/tmp/pwn-realworldwas created — arbitrary command execution in a realistic application context confirmed.Summary
protocol.ext.allow=always(lowercase)PROTOCOL.ALLOW=always(uppercase)/tmp/pwn-codeantcreatedPROTOCOL.ALLOW=always+ attacker URL/tmp/pwn-realworldcreatedThe case-sensitive regex in
preventProtocolOverrideblocksprotocol.*.allowbut does not account for uppercase or mixed-case variants. Git accepts all variants identically due to case-insensitive config key normalisation, allowing full bypass of the protection in all versions of simple-git that carry the 2022 fix./tmp/pwnedis created by the git subprocess via theext::protocol.All of the following bypass the check:
-cprotocol.allow=alwaysPROTOCOL.ALLOW=alwaysProtocol.Allow=alwaysPROTOCOL.allow=alwaysprotocol.ALLOW=alwaysImpact
Any application that passes user-controlled values into the
customArgsparameter of
clone(),fetch(),pull(),push()or similarsimple-gitmethods is vulnerable to arbitrary command execution on the host machine.
The
ext::git protocol executes an arbitrary binary as a remote helper.With
protocol.allow=alwaysenabled, an attacker can run any OS commandas the process user — full read, write and execution access on the host.
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
simple-git is vulnerable to Remote Code Execution
CVE-2026-6951 / GHSA-hffm-xvc3-vprc
More information
Details
Versions of the package simple-git before 3.36.0 are vulnerable to Remote Code Execution (RCE) due to an incomplete fix for CVE-2022-25912 that blocks the -c option but not the equivalent --config form. If untrusted input can reach the options argument passed to simple-git, an attacker may still achieve remote code execution by enabling protocol.ext.allow=always and using an ext:: clone source.
Severity
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:PReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Release Notes
steveukx/git-js (simple-git)
v3.36.0Compare Source
Minor Changes
89a2294: Extend known exploitable configuration keys and per-task environment variables.Note -
ParsedVulnerabilitiesfromargv-parseris removed in favour of a readonly array ofVulnerabilityto match usage insimple-git, rolled into the newvulnerabilityCheckfor simpler access to the identified issues.Thanks to @zebbern for identifying the need to block
core.fsmonitor.Thanks to @kodareef5 for identifying the need to block
GIT_CONFIG_COUNTenvironment variables and--template/mergerelated config.Patch Changes
1ad57e8: Remove conflicting node:buffer import89a2294]675570a]v3.35.2Compare Source
Patch Changes
0cf9d8c: Improvements for mono-repo publishing pipeline0cf9d8c]v3.35.1Compare Source
Patch Changes
0de400e: Update monorepo version handling during publish0de400e]v3.35.0Compare Source
Minor Changes
3d8708b: Updating publish configPatch Changes
3d8708b]v3.34.0Compare Source
Minor Changes
2b68331: Revised dependency tree to add helper modules as dependencies in mainsimple-gitPatch Changes
2e1f51c: Enhances scanning of arguments before passing on to the spawnedchild_process.Caters for
-cflags prefixing thegittask (used when setting global inline config) and suffixing with either-c,--configor--config-env. Detectsgit configoperations that write to the configuration.Updated dependencies [
2e1f51c]v3.33.0Compare Source
Minor Changes
a263635: Usepathspecwrappers for remote and local paths when running eithergit.cloneorgit.mirrortoavoid leaving them less open for unexpected outcomes when passing unsanitised data into these tasks.
Patch Changes
e253a0d: Enhancedgit -cchecks inunsafeplugin.Thanks to @JohannesLks for identifying the issue
v3.32.3Compare Source
Patch Changes
f704208: Enhancedprotocol.allowchecks inallowUnsafeExtProtocolhandling.Thanks to @CodeAnt-AI-Security for identifying the issue
v3.32.2Compare Source
Patch Changes
8d02097: Enhanced clone unsafe switch detection.Configuration
📅 Schedule: (UTC)
🚦 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.
This PR was generated by Mend Renovate. View the repository job log.