Security Digest · Vulnerability record
CVE-2026-102829: simple-git: `VISUAL` editor environment variable is omitted from unsafe editor detection
simple-git, an interface for running git commands in any node.js application, enables applications to execute Git operations from JavaScript.
CVSS 9.2 Critical EPSS 0.3% · p19
Should you act?
Critical and remotely reachable
No known exploitation yet, but it is network-reachable without credentials. This signal is computed from CISA KEV, EPSS and CVSS data; it is not an editorial verdict.
- Not in CISA KEV, but CISA’s SSVC assessment records a public proof-of-concept, so attack code exists.
- EPSS 0.3%, percentile 19: FIRST’s model estimates a 0.3% chance of exploitation activity in the next 30 days, higher than 19% of all scored CVEs (low). EPSS is a probability, not a verdict.
- Remotely reachable with no login and no user interaction. If the vulnerable service is exposed to the internet, prioritize it.
- Only applies if your dependency tree includes
@simple-git/argv-parser(npm) < 2.0.1, fixed in 2.0.1. Check your lockfile, including transitive dependencies.
What it is
simple-git, an interface for running git commands in any node.js application, enables applications to execute Git operations from JavaScript. Prior to 2.0.1 of the argv-parser package, parseEnv omits VISUAL from GitEnvKeys, so prepareEnv drops the value before vulnerabilityCheck can classify it as allowUnsafeEditor. A consuming application that forwards attacker-influenced environment values can therefore allow Git to invoke an attacker-selected editor during operations such as commit amendment or interactive rebase when no higher-priority editor setting overrides VISUAL and Git's terminal prerequisites are met. The executable runs with the privileges of the Node.js process. This issue is fixed in argv-parser 2.0.1.
From the GitHub advisory
Security control bypass in @simple-git/argv-parser: Git's VISUAL editor fallback is not classified as allowUnsafeEditor
Report metadata
| Field | Value | | --- | --- | | Package | @simple-git/argv-parser (npm, pkg:npm/%40simple-git/argv-parser) | | Repository | https://github.com/steveukx/git-js | | Component | parseEnv (packages/argv-parser/src/env/parse-env.ts), reached via vulnerabilityCheck(tokens, env) | | Vulnerability class | Security-control bypass — incomplete denylist in unsafe-editor detection | | Verified against | c427fbad33f1f2b11341f1cf852eedecbb106400 (@simple-git/argv-parser 1.1.1), plus the published npm artifact 1.1.1; main at 98864c6 observed still unpatched | | API surface | Public documented API (parseEnv(raw) / vulnerabilityCheck(tokens, env)) | | Affected in default configuration | Yes — reproduced with blockUnsafeOperationsPlugin under default options, with no unsafe allowances enabled |
Summary
GitEnvKeys in packages/argv-parser/src/env/parse-env.ts maps only editor, giteditor and gitsequenceeditor to the allowUnsafeEditor category. prepareEnv keeps an environment entry only when its lowercased name is a known GitEnvKey or starts with git, so VISUAL is discarded before collectConfigVulnerabilities ever inspects it. Git, however, falls back to VISUAL when resolving an editor, so parseEnv({ VISUAL: '/tmp/evileditor' }) reports no vulnerability while an interactive Git operation will execute that binary.
Weakness type: CWE-78, CWE-184.
Product: @simple-git/argv-parser (npm) · Assigned by: GitHub_M · Published: 2026-09-29
Affected and fixed versions
| Ecosystem | Package | Vulnerable | First fixed |
|---|---|---|---|
| npm | @simple-git/argv-parser | < 2.0.1 | 2.0.1 |
| Vendor | Product | Affected versions (per CVE record) |
|---|---|---|
| steveukx | git-js | < 2.0.1 |
Severity scores
| Scored by | CVSS | Score | Vector |
|---|---|---|---|
| GitHub_M | 4.0 | 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 |
| GitHub | 4.0 | 9.2 | 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 |
- Attack vector: network (remotely reachable)
- Attack complexity: high (needs special conditions)
- Attack requirements: present (depends on deployment conditions)
- Privileges required: none (no login)
- User interaction: none
CVSS measures how bad a flaw is if exploited, not how likely exploitation is. Read it next to the exploitation data below.
Exploitation and urgency
- CISA KEV: not listed (no confirmed in-the-wild exploitation known to CISA).
- CISA SSVC assessment: exploitation poc, automatable no, technical impact total.
- FIRST EPSS (model of 2026-10-21): 0.27% probability of exploitation activity in the next 30 days; percentile 19.
Timeline
- — CVE record published by GitHub_M
- — CVE record last updated
- — GitHub-reviewed advisory GHSA-v5rq-49vh-5v5c published (critical)
Sources and references
Original sources first. Version and fix details should always be confirmed against the vendor or project advisory.
Vulnerability records
- GitHub Advisory GHSA-v5rq-49vh-5v5c github.com
- CVE.org record CVE-2026-102829 cve.org
- NVD entry CVE-2026-102829 nvd.nist.gov
Other references from the CVE record and advisory
- github.com github.com
- github.com github.com
- github.com github.com
- github.com github.com