Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify app passing user URLs to GitPython
-
DeliverySubmit crafted ext:: remote-helper URL
-
Exploitls_remote bypasses check_unsafe_protocols
-
ExecutionGit invokes ext transport helper
-
ImpactExecute arbitrary command on host
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V2 - Validation and Business Logic Specified type validation
|
| Exploitation Conditions | Exploitation requires a consuming application to pass an attacker-controlled remote URL into GitPython's Git.ls_remote (or the similarly unguarded merge_base and IndexFile.move option-injection paths). The decisive prerequisite is that the underlying Git permits the ext transport (protocol.ext.allow), which modern Git disables by default - so the attack succeeds mainly where this has been relaxed or where the application passes untrusted URLs in a context Git treats as user-initiated. Limiting factors: attacker cannot exploit without the application accepting external URLs (UI:P / AT:P), the ext helper must be allowed by Git config, and the flaw is fixed in GitPython 3.2.0. Not exploitable against a default Git configuration that blocks the ext protocol. |
| Impact | This is a moderate-to-serious priority driven by impact rather than ease of exploitation. The CVSS 4.0 vector (AV:N, AC:H, AT:P, PR:N, UI:P, VC:H/VI:H/VA:H) scores 7.7 and shows that while no authentication is required and full triad impact is achievable (code execution), exploitation is gated by High attack complexity, a Present attack requirement (AT:P), and passive user/application interaction (UI:P). The critical real-world limiter is that the ext:: remote-helper transport must be permitted by Git - modern Git disables this by default (protocol.ext.allow=user), so default-configured environments are not exploitable without a non-default setting or an application that explicitly enables it. No EPSS score, CISA KEV listing, or public POC is present in the provided data, so there is no evidence of active exploitation; exploitation status is 'no public exploit identified at time of analysis.' The signals are internally consistent - high technical impact but constrained prerequisites - meaning this should be patched on a normal-to-expedited cadence rather than treated as an emergency, with priority raised for any deployment that passes untrusted URLs into GitPython or has relaxed Git protocol settings. The CWE-1287 (improper input validation) classification aligns with the root cause: Git.ls_remote forwarding URLs without check_unsafe_protocols validation. |
| Exploit ScenarioDerived | An application using GitPython (e.g., a CI/CD runner, repo-indexing service, or web app) accepts a remote repository URL from an untrusted user and passes it to Git.ls_remote (or merge_base / IndexFile.move). The attacker submits an 'ext::sh -c <command>' style URL; because ls_remote skips check_unsafe_protocols validation, GitPython hands it to Git, which executes the attacker's command if the ext transport is permitted. No public exploit code is identified at time of analysis, but the technique is well-understood and the attack requires the victim application to process the malicious URL (UI:P). |
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 releases before 3.2.0 (CVE-2026-110857) allows unauthenticated attackers to execute arbitrary commands through Git.ls_remote, which forwards a caller-supplied remote URL without the check_unsafe_protocols validation that normally blocks dangerous transports, notably ext:: remote-helper URLs when Git's protocol.ext.allow setting permits them. Exploitation is conditional rather than trivial: a consuming application must pass an attacker-controlled URL into the affected API (user interaction is required per the assessed CVSS:3.1 vector AV:N/AC:H/PR:N/UI:R), and a default Git configuration that rejects the ext transport blocks the primary ls_remote path, while the related merge_base and IndexFile.move option-injection paths remain similarly unguarded. No public exploit identified at time of analysis; the flaw is fixed in GitPython 3.2.0.
RemediationAI
Upgrade GitPython to 3.2.0 or later, which is the vendor-released patch that restores check_unsafe_protocols validation on Git.ls_remote and closes the related merge_base and IndexFile.move option-injection paths; see the advisory at https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-w8jc-g24h-crhw for details. Until the upgrade can be deployed, confirm that protocol.ext.allow is unset or explicitly denied in every git configuration reachable by the application, since a default Git blocks the ext transport and breaks the primary ls_remote attack path - the trade-off is that this also disables legitimate ext remote helpers some workflows rely on. Additionally, validate and allowlist remote URL schemes (for example https, ssh, and git only) before any value reaches Git.ls_remote, and avoid passing untrusted strings to merge_base or IndexFile.move where a leading "-" could be parsed as an option; the trade-off there is that strict URL allowlisting can break unusual but valid transports such as file:// or custom helpers, so it should be scoped to the code paths that accept external input. Prioritize patching in applications that accept user-submitted repository URLs, and treat such input as untrusted even after upgrading.
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
GitPython is a Python library that shells out to the git command-line client, and its safety design leans on a check_unsafe_protocols guard that rejects dangerous remote URL schemes before they reach git. In versions before 3.2.0, Git.ls_remote does not apply that guard, so an attacker-influenced URL reaches git intact; the highest-impact vector is the ext:: remote-helper syntax, which git honors as a command to spawn when the ext transport is permitted (protocol.ext.allow), yielding code execution in the context of the calling process. The root-cause class is CWE-1287 (Improper Validation of Specified Type of Input): the transport/URL type is not validated against an allowlist before use. Two sibling paths compound the problem - merge_base and IndexFile.move accept unguarded option injection, meaning arguments beginning with "-" can be interpreted as git options rather than data. The affected technology stack is Python applications that embed GitPython for repository introspection, cloning, or remote inspection, and the decisive environmental prerequisite is a Git configuration that does not block the ext transport, which modern git disables by default.
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:H/AT:P/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
AC:H and UI:R because success needs Git's non-default ext transport enabled and an application that processes an attacker-supplied URL; PR:N as no auth is required, with full C/I/A from command execution.
Primary rating from Vendor (vulncheck).
CVSS VectorVendor: vulncheck
Lifecycle Timeline
2DescriptionCVE.org
GitPython before 3.2.0 contains a remote code execution vulnerability that allows attackers to run commands because Git.ls_remote forwards URLs without check_unsafe_protocols validation. Attackers can supply ext:: remote-helper URLs to execute commands when git permits the ext transport, while merge_base and IndexFile.move also accept unguarded option injection.
Technical POC Analysis
Note on scoring: the advisory scores this 7.5 with CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H.
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 widely used Python library for Git repository interaction, contains a remote code execution vulnerability in versions prior to 3.2.0. Organizations that deploy applications accepting untrusted repository URLs may face arbitrary command execution on host systems, risking data loss, lateral movement, or full system compromise. Security leadership should prioritize remediation given the high severity and potential for significant business disruption.
Apply vendor patch.
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-101740
GHSA-jj45-mj3g-556c
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB