Skip to main content

GitPython EUVDEUVD-2026-101741

| CVE-2026-110858 CRITICAL
Improper Neutralization of Argument Delimiters in a Command ('Argument Injection') (CWE-88)
2026-10-14 disclosure@vulncheck.com GHSA-mcf4-6385-6rcq
9.2
CVSS 4.0 · Vendor: vulncheck
View

Attack ChainAIDerived

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

  1. Access
    Supply refspec to app using Remote.pull()
  2. Delivery
    Inject --upload-pack=<command> positional option
  3. Exploit
    Bypass keyword-only unsafe-option guard
  4. Execution
    Git executes option over SSH/local transport
  5. Impact
    Run OS commands as calling process

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Argument sanitization
Exploitation Conditions

Exploitation requires that the calling application pass attacker-controlled data as the POSITIONAL refspec argument to GitPython's Remote.pull(); the flaw's unsafe-option guard validates only keyword arguments, so a positional '--upload-pack=<command>' slips through. The affected transports are local-path and SSH remotes, and the affected version range is GitPython 3.1.30 up to (but not including) 3.2.0 - installations on 3.2.0+ or before 3.1.30 are not vulnerable. The principal LIMITING factor is the data path: if the application never exposes the refspec to untrusted input (hardcoded or server-controlled refspecs), the vulnerability is not reachable despite PR:N/UI:N. Commands execute with the privileges of the Python process invoking GitPython, so process sandboxing/least-privilege further bounds impact.

Impact

This is a genuine high-priority issue rather than a CVSS-inflated one, but with an important caveat about exploitability conditions. The CVSS 4.0 vector (AV:N, AC:L, PR:N, UI:N, VC:H/VI:H/VA:H) and 9.2 score reflect that successful exploitation yields full OS command execution as the calling process with no authentication and no user interaction. Critically, however, the vector carries AT:P (attack requirements present), which aligns with the description: the attacker does not attack GitPython directly but must control the positional refspec passed into Remote.pull() by a host application - so real-world risk is bounded by whether a deployed application forwards untrusted input into that argument. No EPSS score was provided and the CVE is NOT listed in CISA KEV; no POC was supplied in the intelligence, so exploitation status is no public exploit identified at time of analysis. CWE-88 (argument injection) and the --upload-pack=<command> technique are well-understood classes with trivially reproducible exploitation once the data path exists, so the gap between 'no POC seen' and 'weaponizable' is small. Net: treat as urgent for any application that passes user-controllable refspecs to GitPython, but note the AT:P prerequisite distinguishes this from a wormable, zero-condition RCE.

Exploit ScenarioDerived

An application uses GitPython's Remote.pull() and passes a user-supplied value as the refspec (e.g., a web service that lets users specify a branch/ref to synchronize). An attacker submits a refspec of '--upload-pack=touch /tmp/pwned;' (or a reverse-shell command); because the unsafe-option guard only inspects keyword arguments, the malicious positional option reaches the underlying git invocation over a local-path or SSH transport and executes as the service process. No authentication to GitPython and no user interaction are required once attacker input reaches the refspec; no public POC was provided in the intelligence.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
Patch available 0.5% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Oct 14, 2026

Remote code execution in GitPython 3.1.30 through 3.1.x allows unauthenticated attackers controlling the positional refspec argument to Remote.pull() to execute arbitrary OS commands via a crafted --upload-pack option, bypassing the library's keyword-only unsafe-option guard. The flaw affects local-path and SSH transports and is fixed in 3.2.0; no public exploit code has been identified at time of analysis, but the vulnerability carries a CVSS 4.0 base score of 9.2 and requires the calling application to pass attacker-controlled data as the positional refspec.

RemediationAI

Upgrade to GitPython 3.2.0 or later, which properly validates positional refspec arguments and blocks unsafe options like --upload-pack. If immediate upgrade is not possible, ensure that the refspec argument to Remote.pull() is never derived from untrusted input; if it must be dynamic, sanitize it strictly to reject any value beginning with a dash or containing dangerous option strings, though this is error-prone. As a compensating control, avoid using local-path or SSH transports for pull operations that involve untrusted refspecs, or restrict the GitPython process to a sandbox with least privilege to limit the impact of command execution. Refer to the advisory at https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-f9j4-qggq-h239 for more information.

Affected VersionsENISA

GitPython 3.1.30 <3.2.0

Affected Packages

euvd gitpython fix: 3.2.0

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

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

Technical ContextAI · show details

The vulnerability is an argument injection (CWE-88) in GitPython's Remote.pull() method. GitPython wraps the git command-line tool; the pull() method builds a git pull command with the given refspec. A security guard intended to block unsafe options like --upload-pack inspects only keyword arguments, so when the refspec is supplied as a positional argument an attacker-controlled value such as --upload-pack=<command> is passed to git. Git's --upload-pack option specifies the remote program to run for fetching, allowing arbitrary command execution as the calling process. The affected transports are local-path and SSH remotes; no authentication is required (PR:N), but the calling application must forward untrusted input into the positional refspec argument. Fixed in GitPython 3.2.0 by extending the guard to positional arguments.

Know when the next one hits your stack

  • 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 9.2 CRITICAL
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
vuln.today AI 8.1 HIGH

AV:N for SSH transport and no privileges in GitPython itself (PR:N); AC:H because exploitation depends on the host application routing untrusted input into the positional refspec; full C/I/A from arbitrary OS command execution.

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

Primary rating from Vendor (vulncheck).

CVSS VectorVendor: vulncheck

Attack Vector
Network
Attack Complexity
Low
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
Oct 15, 2026 - 02:16 EUVD
CVE Published
Oct 14, 2026 - 23:17 cve.org
CRITICAL 9.2

DescriptionCVE.org

GitPython from 3.1.30 before 3.2.0 contains a remote code execution vulnerability in Remote.pull() whose unsafe-option guard inspects only keyword arguments, not the positional refspec. Attackers controlling the refspec can supply --upload-pack=<command> to execute OS commands as the calling process over local-path or SSH transports.

Technical POC Analysis

The evidence does not include a patch diff; the root cause below is reconstructed from the advisory root-cause, bypass-evidence, and suggested-fix sections.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

GitPython, a Python library widely embedded in CI/CD pipelines, release automation, and internal developer tooling, contains a critical remote code execution flaw (CVE-2026-110858, CVSS 9.2) affecting versions 3.1.30 through 3.1.x, where attacker-influenced data reaching a repository pull operation can result in arbitrary OS command execution on the host. Any pipeline job, automation service, or developer workstation that passes externally sourced data into that pull call over local-path or SSH transports effectively hands the attacker the privileges of the running process - typically including source code access, build secrets, and deployment credentials. Because these systems frequently sit on the path to production, leadership should treat this as a supply-chain and build-integrity exposure rather than a routine library defect.

Business Impact: High
Compensating Controls

No vendor-released patch identified in the supplied patch-status metadata at time of analysis, although the vulnerability description references 3.2.0 as the fixed version - validate that release with the vendor before relying on it. Interim mitigations: enforce strict allowlist validation of all refspec values before they reach Remote.pull() and never pass externally sourced data as the positional argument; restrict clones and pulls to HTTPS transport rather than local-path or SSH where feasible; run GitPython workloads in low-privilege, network-restricted containers with no persistent credentials; and monitor for unexpected child-process execution and outbound connections from build and automation hosts.

Threat Intelligence Overview

EPSS Score
0.5%
Top 61% exploitable
Prevalence
High
GitPython is a widely-used Python git library across CI, automation, and web tooling
Data Quality
6 sources
Confidence: High

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 No
EPSS 0.5%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
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

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

Attack Technique

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

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