Skip to main content

simple-git CVE-2026-102828

| EUVDEUVD-2026-89334 CRITICAL
OS Command Injection (CWE-78)
2026-09-29 security-advisories@github.com GHSA-x6jw-m9v5-85vh
9.2
CVSS 4.0 · Vendor: github
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Supply malicious value to app input
  2. Delivery
    App forwards it into git config/-c
  3. Exploit
    Set trailer.<token>.cmd to shell command
  4. Execution
    git interpret-trailers invokes command
  5. Impact
    Arbitrary 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.

Act Now Prioritize within 24-48h. Why: CRITICAL severity + public POC available.
1 public PoC Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

git-js 3.15.0, < 4.0.1

Affected Packages

npm simple-git fix: 4.0.1
euvd git_js_3_15_0 fix: 4.0.1

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

Vendor (github) PRIMARY 9.2 CRITICAL
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
vuln.today AI 8.1 HIGH

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.

3.1 AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:H/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Red Hat 8.1 HIGH

Primary rating from Vendor (github).

CVSS VectorVendor: github

Attack Vector
Network
Attack Complexity
High
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Sep 29, 2026 - 20:04 EUVD
CVE Published
Sep 29, 2026 - 19:17 cve.org
CRITICAL 9.2

DescriptionCVE.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
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 19 npm packages depend on simple-git (15 direct, 4 indirect)

Ecosystem-wide dependent count for version 3.15.0.

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

Why It Matters

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.

Business Impact: High
Compensating Controls

Apply vendor patch (simple-git 4.0.1).

Threat Intelligence Overview

EPSS Score
0.3%
Top 82% exploitable
Prevalence
High
simple-git is an extremely popular npm Git wrapper, tens of millions of weekly downloads
Threat Intel
1
1 sources
Data Quality
6 sources
Confidence: High
EUVD 🇯🇵JVN NVD CVE.org EPSS Vulnrichment GHSA Vendor GitHub

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.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC Yes
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity + public POC available
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision
Scheduled
Exploitation
None
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

66
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +46
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

OS command injection occurs when an application passes unsanitized user input directly into system shell commands.

CVE-2025-68613 HIGH POC
8.8 Dec 19

Remote code execution in n8n's workflow expression evaluation system allows an authenticated user with workflow creation

CVE-2024-41713 CRITICAL POC
9.1 Oct 21

A vulnerability in the NuPoint Unified Messaging (NPM) component of Mitel MiCollab through 9.8 SP1 FP2 (9.8.1.201) could

CVE-2024-55591 CRITICAL POC
9.8 Jan 14

FortiOS and FortiProxy contain an authentication bypass via the Node.js websocket module allowing unauthenticated remote

CVE-2023-44487 HIGH POC
7.5 Oct 10

Denial of service against HTTP/2 server implementations allows remote unauthenticated attackers to exhaust server resour

CVE-2014-7205 CRITICAL POC
10.0 Oct 08

Eval injection vulnerability in the internals.batch function in lib/batch.js in the bassmaster plugin before 1.5.2 for t

CVE-2025-59528 CRITICAL POC
10.0 Sep 22

Flowise version 3.0.5 contains a remote code execution vulnerability in the CustomMCP node. The mcpServerConfig paramete

CVE-2017-14849 HIGH POC
7.5 Sep 28

Node.js 8.5.0 before 8.6.0 allows remote attackers to access unintended files, because a change to ".." handling was inc

CVE-2017-5941 CRITICAL POC
9.8 Feb 09

An issue was discovered in the node-serialize package 0.0.4 for Node.js. Rated critical severity (CVSS 9.8), this vulner

CVE-2014-0224 HIGH POC
7.4 Jun 05

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

CVE-2014-3744 HIGH POC
7.5 Oct 23

Directory traversal vulnerability in the st module before 0.2.5 for Node.js allows remote attackers to read arbitrary fi

CVE-2014-9566 HIGH POC
7.5 Mar 10

Multiple SQL injection vulnerabilities in the Manage Accounts page in the AccountManagement.asmx service in the Solarwin

CVE-2013-4660 MEDIUM POC
6.8 Jun 28

The JS-YAML module before 2.0.5 for Node.js parses input without properly considering the unsafe !!js/function tag, whic

Vendor StatusVendor

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy