Skip to main content

gitoxide CVE-2026-40034

| EUVDEUVD-2026-31831 HIGH
Command Injection (CWE-77)
8.5
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Access
    Host malicious git repository
  2. Delivery
    Victim clones and initializes submodule
  3. Exploit
    Push updated .gitmodules with update=!cmd
  4. Execution
    Victim invokes Submodule::update() via gix tool
  5. Persist
    Guard bypass returns Update::Command
  6. Impact
    Shell command executes as victim user

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Command injection prevention
MITRE ATT&CK

1 technique 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 (1) the victim to use a tool built on gitoxide's gix or gix-submodule crate at a vulnerable version (>= 0.31.0, < 0.83.0); (2) the targeted submodule must have been previously initialized so that 'submodule.<name>.url' exists in .git/config (i.e., 'git submodule init' or equivalent has run at least once); (3) the attacker must control the .gitmodules content delivered in a subsequent fetch/update - typically via a malicious or compromised remote repository; and (4) the victim must subsequently invoke Submodule::update() (passive user interaction per CVSS UI:P). It does NOT trigger on a fresh clone before initialization, does NOT affect canonical git (which rejects the invalid update value with 'fatal: invalid value for submodule.sub.update'), and does NOT require authentication on the victim system; the CVSS AV:L indicates the malicious payload is processed locally even though it is delivered remotely.

Impact

The CVSS 4.0 vector (AV:L/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H) scores 8.5 and reflects local attack vector with passive user interaction and high impact on confidentiality, integrity, and availability - which matches the realistic threat model: a victim runs a gitoxide-based tool against a malicious repository. SSVC reports Exploitation=PoC, Automatable=No, Technical Impact=Total, aligning with the published proof-of-concept from VulnCheck and the GitHub Security Advisory. EPSS is very low (0.02%, 5th percentile) and the CVE is not on CISA KEV, indicating no observed mass exploitation; this is consistent with the targeted nature (must induce a victim to clone/update a crafted repo using a gitoxide-based client). The CVSS AV:L is worth scrutinizing - exploitation requires a local gitoxide operation against attacker-controlled .gitmodules content, so 'local' is accurate but the delivery channel is remote (malicious repo hosting), which defenders should consider when prioritizing.

Exploit ScenarioDerived

An attacker publishes (or compromises) a public Git repository containing a benign initial state, induces a victim to clone and initialize submodules using a gitoxide-based tool, then later pushes an updated .gitmodules adding 'update = !arbitrary_shell_command' for the already-initialized submodule. When the victim next invokes Submodule::update() (for example via a CI job, mirroring tool, or wrapper CLI built on gix), the guard incorrectly passes and the attacker's shell command executes with the victim's privileges. A working proof-of-concept demonstrating Ok(Some(Update::Command("touch /tmp/pwned"))) is referenced in the GHSA writeup.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.0% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Jun 08, 2026

Command injection in the gitoxide Rust library (gix-submodule crate before 0.82.0, gix before 0.83.0) allows attackers controlling a repository's .gitmodules file to bypass the CommandForbiddenInModulesConfiguration guard and achieve arbitrary command execution when Submodule::update() runs against a previously-initialized submodule. The flaw stems from gix_submodule::File::update() checking only whether a same-named section exists in .git/config rather than verifying that the update value itself originated from that trusted source, so an attacker-supplied 'update = !cmd' falls through to execution. Publicly available exploit code exists (PoC referenced by VulnCheck and Anthropic), though EPSS is low (0.02%) and the issue is not in CISA KEV.

RemediationAI

Vendor-released patch: upgrade gix-submodule to 0.82.0 or later, or gix to 0.83.0 or later, with fixes landed in commits 6a2e6a436f76c8bbf2487f9967413a51356667a0 and dd5c18d9e526e8de462fa40aa047acd097cfa7dc (see https://github.com/GitoxideLabs/gitoxide/security/advisories/GHSA-f26g-jm89-4g65 and the VulnCheck advisory at https://www.vulncheck.com/advisories/gitoxide-command-injection-via-partial-gitmodules-override-in-gix-submodule). Downstream Rust projects should run 'cargo update -p gix-submodule -p gix' and rebuild; SUSE and other distributors should pick up the fixed crate versions. As a workaround until the upgrade lands, avoid calling gix::Submodule::update() on repositories obtained from untrusted sources, or pre-validate that no '.gitmodules' submodule contains an 'update' key beginning with '!' - the trade-off is that legitimate submodule update flows must be paused or wrapped, which can break automation that depends on submodule checkout behavior.

Affected VersionsENISA

gitoxide 0 <0.82.0

Affected Packages

cargo gix fix: 0.83.0
euvd gitoxide fix: 0.82.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in cargo, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

gitoxide is a pure-Rust reimplementation of Git, and the gix-submodule crate handles parsing of .gitmodules submodule definitions. Git's submodule.<name>.update key supports a '!command' form whose execution Git restricts to trusted .git/config sources because of historical abuse (CVE-2019-19604). In gix_submodule/src/access.rs, File::update() looks up the value via gix_config's section iteration (newest-to-oldest) and then attempts to confirm trust by calling sections_by_name("submodule"); however, the guard only confirms that some non-.gitmodules section bearing the submodule name exists, not that the specific 'update' key was set there. This is a classic CWE-77 (Improper Neutralization of Special Elements used in a Command) caused by an incomplete provenance check on configuration values. Affected CPE is cpe:2.3:a:gitoxide:gitoxide:*:*:*:*:*:*:*:*, covering the rust/gix crate at versions >= 0.31.0 and < 0.83.0.

Know when Gitoxide 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 (VulnCheck) PRIMARY 8.5 HIGH
CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
SUSE 7.8 HIGH
AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Local
Attack Complexity
Low
Attack Requirements
None
Privileges Required
None
User Interaction
Passive
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

1
CVSS changed
May 26, 2026 - 15:22 NVD
7.8 (HIGH) 8.5 (HIGH)

DescriptionCVE.org

gix-submodule before 0.82.0 incorrectly validates the update field in .gitmodules, allowing attackers to bypass the CommandForbiddenInModulesConfiguration guard when a submodule has been initialized with only partial configuration in .git/config. An attacker can inject arbitrary shell commands via the update field in .gitmodules that will be executed when Submodule::update() is called on a previously-initialized submodule, enabling remote code execution.

Executive ViewAI

Why It Matters

The gitoxide Rust library contains a critical vulnerability (CVSS 8.5) that enables arbitrary code execution through malicious Git configuration files in repositories. Development teams and automated build systems utilizing this library face supply chain risk, particularly when processing untrusted repositories. Publicly available exploit code exists.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.0%
Top 95% exploitable
Threat Intel
1
1 sources
Exploit
POC
Public exploit code exists
Social Media
1
Sightings
Data Quality
8 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA MSRC Vendor CIRCL GitHub VulDB

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 HIGH
CISA KEV No
Public POC Yes
EPSS 0.0%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
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
Poc
System Exposure· derived
Small
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

62
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +42
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.

Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.

CVE-2026-82253 HIGH
8.7 Aug 28

Path traversal and trust inheritance flaws in gitoxide's Rust crates gix (≤ 0.72.0) and gix-validate (≤ 0.10.0) allow an

CVE-2026-82252 HIGH
8.7 Aug 28

Symlink following in gitoxide before 0.52.1 and the gix crate before 0.83.0 allows an attacker who supplies a malicious

CVE-2026-82251 HIGH
8.7 Aug 28

Path traversal in gitoxide before 0.52.1 and gix before 0.83.0 allows an attacker who supplies a malicious git repositor

CVE-2026-82254 HIGH
8.7 Aug 28

Denial-of-service in gitoxide's gix-pack crate before 0.69.0 exposes Rust Git clients to remote process crashes during c

CVE-2026-82247 HIGH
8.7 Aug 28

Credential exfiltration in gitoxide's gix-transport crate allows a server controlling an HTTP redirect response to steal

CVE-2026-82255 HIGH
7.6 Aug 28

Credential theft in gitoxide's curl-based HTTP transport backend allows attackers to capture authentication tokens (pass

CVE-2026-82250 HIGH
7.1 Aug 28

Index-out-of-bounds panic in gitoxide's gix-packetline library (versions before 0.21.5) allows a malicious Git server to

CVE-2026-82248 MEDIUM
6.0 Aug 28

Arbitrary file write outside the worktree boundary in gix-worktree-state (part of gitoxide) before 0.33.0 on Windows ena

CVE-2026-91986 MEDIUM
5.3 Sep 15

Control-character injection in gitoxide's gix-transport crate before version 0.59.2 lets crafted git-daemon URLs smuggle

CVE-2026-82249 LOW
2.3 Aug 28

Credential hijacking in gitoxide before 0.38.2 allows remote attackers to redirect credential helper lookups to attacker

Vendor StatusVendor

SUSE

Severity: High
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Fixed
SUSE Linux Enterprise Desktop 15 SP7 Fixed
SUSE Linux Enterprise Desktop 15 SP7 Fixed
SUSE Linux Enterprise Desktop 15 SP7 Fixed
SUSE Linux Enterprise Desktop 15 SP7 Fixed

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