Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSupply malicious value to app input
-
DeliveryApp forwards it into git config/-c
-
ExploitSet trailer.<token>.cmd to shell command
-
Executiongit interpret-trailers invokes command
-
ImpactArbitrary code runs as Node process
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization OS command sanitization, avoid shell exec
MITRE ATT&CK
2 techniques across 1 tactic: Execution The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires that the host application pass ATTACKER-CONTROLLED values into simple-git's SimpleGitOptions.config or into inline -c arguments, AND that the application subsequently trigger a code path invoking git interpret-trailers. The specific unsafe setting is trailer.<token>.cmd (also trailer.<token>.command), which the default blockUnsafeOperationsPlugin failed to classify as unsafe in versions 3.15.0 through 4.0.0. Limiting factors: applications that only pass trusted/hard-coded configuration are NOT exploitable; the flaw does not bypass simple-git's other unsafe-operation blocks; and the resulting command runs only with the privileges of the Node.js process (no privilege escalation). The related rebase --exec/-x vector fixed in the same commit has similar preconditions. Applications on 4.0.1+ are protected by default (the new allowUnsafeCommandBinaries category must be explicitly opted into). |
| Impact | This is a genuine remote code execution flaw (CWE-78) in simple-git, one of the most heavily depended-upon Git wrappers in the Node.js ecosystem, so the product footprint alone warrants attention. The vendor CVSS 4.0 score of 9.2 is driven by full VC:H/VI:H/VA:H impact (arbitrary command execution as the Node process) combined with AV:N/PR:N/UI:N, but it is tempered by AC:H and AT:P - reflecting that exploitation is not universal: the application must route attacker-controlled data into SimpleGitOptions.config or inline -c arguments. The real-world risk therefore hinges on application design, not on simple-git being installed. No EPSS score, no CISA KEV listing, and no public proof-of-concept were provided, so there is no public exploit identified at time of analysis and no evidence of active exploitation - the severity is potential/structural rather than observed. A notable nuance: the vulnerability is specifically a GAP in a security control - the default blockUnsafeOperationsPlugin was SUPPOSED to block this class of RCE but failed to classify trailer.<token>.cmd/.command, so developers who believed they were protected were not. Net assessment: a high-priority patch for anyone forwarding untrusted input into git config, but a low-to-moderate practical concern for the (likely majority of) integrations that only pass trusted, hard-coded configuration. |
| Exploit ScenarioDerived | A Node.js web service uses simple-git and lets users influence git configuration - for example a CI/hosting platform that accepts per-repo config or trailer settings - and forwards that value into SimpleGitOptions.config or an inline -c argument. An attacker submits a value that sets trailer.<token>.cmd (or .command) to a shell command; when the application later runs git interpret-trailers, Git invokes the attacker's command with the identity and permissions of the Node.js process. No public PoC was provided, and the AC:H/AT:P vector means the vulnerable data flow must already exist in the application. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 29, 2026
Command injection in the simple-git Node.js library (versions 3.15.0 through 4.0.0) allows remote, unauthenticated attackers to execute arbitrary shell commands under the identity of the Node.js process when a host application forwards attacker-controlled values into SimpleGitOptions.config or inline -c arguments and later runs git interpret-trailers, because the default blockUnsafeOperationsPlugin does not flag trailer.<token>.cmd (or trailer.<token>.command) as unsafe configuration. This is CWE-78 (OS command injection), rated 9.2 under CVSS v4.0 by the reporter and independently assessed as CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H; exploitation is contingent on the application actually passing untrusted config into simple-git, so apps using only hard-coded/trusted configuration are not exposed and no privilege escalation beyond the Node process is possible. A vendor-released patch is available in simple-git 4.0.1, which introduces the allowUnsafeCommandBinaries category; there is no public exploit identified at time of analysis and the issue is not listed in CISA KEV.
RemediationAI
Upgrade to simple-git 4.0.1 (release tag simple-git@4.0.1) or later, which contains commit d762810c13b331ff1e5eb24c0b434646d2a8d1b3 and PR steveukx/git-js#1198; this is the vendor-released patch and it both expands the blockUnsafeOperationsPlugin's preventUnsafeConfig list to cover trailer.<token>.cmd and trailer.<token>.command and adds rebase -x/--exec (including abbreviated forms such as --ex and --exe) to the allowUnsafeExec detection. Until the upgrade can be deployed, the most effective control is to eliminate the precondition: never interpolate untrusted input into SimpleGitOptions.config or into -c arguments - resolve configuration keys and values against a strict server-side allowlist, reject any key matching the trailer* pattern, and block all git invocation paths that reach interpret-trailers (the trade-off is reduced flexibility for legitimate trailer automation, and allowlisting requires ongoing maintenance as git gains new configuration keys). Running the Node.js process as a least-privileged, non-root user with a restricted shell environment limits the blast radius of any successful injection but does not prevent execution, and container/sandbox isolation similarly contains rather than fixes the flaw. Note that the legacy escape hatch of setting unsafe: { allowUnsafeCommandBinaries: true } or unsafe: { allowUnsafeExec: true } deliberately re-enables the dangerous behavior and should never be used with untrusted configuration input. Consult the advisory at https://github.com/steveukx/git-js/security/advisories/GHSA-x6jw-m9v5-85vh for the authoritative fix guidance.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in npm, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
simple-git is a widely depended-upon Node.js wrapper that shells out to the git binary, parsing and validating the arguments an application supplies through its argv-parser component. The library ships a defensive mechanism - the blockUnsafeOperationsPlugin (docs/PLUGIN-UNSAFE-ACTIONS.md) - whose preventUnsafeConfig list enumerates git configuration keys considered dangerous. Prior to the fix, that list did not include the trailer configuration keys that instruct git interpret-trailers to run an external program: trailer.<token>.cmd and trailer.<token>.command. Because these settings can be injected either through SimpleGitOptions.config or through inline -c arguments on the git command line, an application that reflects attacker-controlled input into that configuration lets git itself launch an attacker-chosen command, which runs with the operating-system identity and permissions of the Node.js process (root cause class: CWE-78, OS command injection via configuration). The same upstream commit (d762810c13b331ff1e5eb24c0b434646d2a8d1b3) also closed a related bypass in the argv-parser's flag detection: git accepts unambiguous abbreviations of long options, so rebase -x, --exec, --ex and --exe are all executed, and the vulnerability test suite now covers config writes such as trailer.foo.command, trailer.foo.cmd and trailer.cmd. The fix adopts a default-deny posture: the new allowUnsafeCommandBinaries category blocks configuration of command binaries (and exec-style rebase flags move under allowUnsafeExec) unless the integrator explicitly opts in via unsafe: { allowUnsafeCommandBinaries: true }. Note that the input data does not include CPE strings for this CVE, so affected-component identification rests on the npm package names and versions rather than on CPE enumeration.
Know when Node.js gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
AC:H because a specific application data-flow (untrusted input reaching config/-c) must exist; PR:N/UI:N as the attacker needs no credentials once that flow exists; RCE in the Node process gives C:H/I:H/A:H, no scope change.
Primary rating from Vendor (github).
CVSS VectorVendor: github
Lifecycle Timeline
2DescriptionCVE.org
simple-git, an interface for running git commands in any node.js application, enables applications to execute Git operations from JavaScript. From 3.15.0 until 4.0.1, the default blockUnsafeOperationsPlugin does not classify trailer.<token>.cmd as unsafe configuration. An application that passes attacker-controlled values through SimpleGitOptions.config or inline -c arguments can therefore allow Git to invoke an attacker-selected shell command when git interpret-trailers processes the configured trailer. The command executes with the operating-system identity and permissions of the Node.js process. This issue is fixed in 4.0.1.
Blast Radius
ecosystem impact- 19 npm packages depend on simple-git (15 direct, 4 indirect)
Ecosystem-wide dependent count for version 3.15.0.
Articles & Coverage 1
Technical POC Analysis
CWE-78: OS command injection.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Latest POC
1 public PoC link from github
Sign in to open the public PoC links collected for this CVE.
Executive ViewAI
A critical command-injection vulnerability in the widely used simple-git Node.js library (versions 3.15.0 through 4.0.0) allows unauthenticated remote attackers to execute arbitrary shell commands with the privileges of the Node.js process. Exposure is limited to applications and CI/CD pipelines that forward untrusted input into git configuration options and subsequently invoke git operations, but for those systems a single request can hand an attacker control of the running service and any credentials it holds. Leadership should care because these libraries sit inside build pipelines and deployment tooling where compromise can cascade into source code, artifacts, and production environments.
Apply vendor patch (simple-git 4.0.1).
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
OS command injection occurs when an application passes unsanitized user input directly into system shell commands.
Remote code execution in n8n's workflow expression evaluation system allows an authenticated user with workflow creation
A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could
FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote
Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour
Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t
Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete
Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc
An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner
OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph
Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi
Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin
The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic
EUVD-2026-89334
GHSA-x6jw-m9v5-85vh
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB