Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessSupply refspec to app using Remote.pull()
-
DeliveryInject --upload-pack=<command> positional option
-
ExploitBypass keyword-only unsafe-option guard
-
ExecutionGit executes option over SSH/local transport
-
ImpactRun 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
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
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.
Primary rating from Vendor (vulncheck).
CVSS VectorVendor: vulncheck
Lifecycle Timeline
2DescriptionCVE.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
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.
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
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
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
EUVD-2026-101741
GHSA-mcf4-6385-6rcq
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB