Skip to main content

GitPython CVE-2026-76220

| EUVDEUVD-2026-62461 HIGH
Improper Neutralization of Argument Delimiters in a Command ('Argument Injection') (CWE-88)
8.7
CVSS 4.0 · Vendor: VulnCheck
Share

Severity by source

Vendor (VulnCheck) PRIMARY
8.7 HIGH
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
vuln.today AI
7.5 HIGH

AC:H reflects the specific application-level precondition that user-controlled kwargs including split_single_char_options=False must be forwarded to GitPython; PR:L per vendor CVSS 4.0; C/I/A:H from arbitrary command execution.

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

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
X

Lifecycle Timeline

4
Patch available
Aug 19, 2026 - 15:17 EUVD
Source Code Evidence Fetched
Aug 19, 2026 - 14:50 vuln.today
Analysis Generated
Aug 19, 2026 - 14:50 vuln.today
CVE Published
Aug 19, 2026 - 14:02 cve.org
HIGH 8.7

Blast Radius

ecosystem impact
† from your stack dependencies † transitive graph · vuln.today resolves 4-path depth
  • 16 pypi packages depend on gitpython (15 direct, 1 indirect)

Ecosystem-wide dependent count for version 3.1.58.

DescriptionCVE.org

GitPython before 3.1.58 contains a command execution vulnerability in the check_unsafe_options guard that can be bypassed by combining a single-character kwarg with split_single_char_options=False. Attackers can supply a crafted kwargs dictionary to guarded methods like clone_from to emit a joined token parsed as --upload-pack, enabling arbitrary OS command execution at default allow_unsafe_options=False.

AnalysisAI

Arbitrary OS command execution in GitPython before 3.1.58 is possible by bypassing the check_unsafe_options guard using a single-character kwarg combined with split_single_char_options=False, causing git's short-option parser to interpret a smuggled joined token as --upload-pack=<cmd>. This is a second-order incomplete-fix bypass of the previously patched GHSA-r9mr-m37c-5fr3, affecting all guarded methods including clone_from, fetch, pull, push, ls_remote, iter_commits, blame, and archive. A working proof-of-concept is publicly available in the upstream GitHub Security Advisory GHSA-wvpp-8hx9-p66j; no CISA KEV listing is present at time of analysis, but the public PoC significantly lowers the exploitation bar.

Technical ContextAI

GitPython (CPE: cpe:2.3:a:gitpython-developers:gitpython) is a Python library that constructs git subprocess invocations by converting Python kwargs into argv tokens. The check_unsafe_options guard (CWE-88: Argument Injection or Modification) was introduced to block dangerous git options such as --upload-pack. The guard calls _option_candidates() to build a candidate list, then checks it against a denylist. The flaw (cmd.py:1048) is that _option_candidates only derives value-derived candidates for single-character keys when split_single_char_options is True - with split_single_char_options=False, the candidate list for a single-char key contains only the bare flag (e.g., -n), never the joined value token. However, transform_kwarg() (cmd.py:1631) unconditionally emits the joined token (-nutouch /tmp/ACE;git-upload-pack) into argv. Git's short-option clustering then parses -n followed by -u<value>, where -u is git's short form of --upload-pack, a parameter that specifies a program to execute on the remote side. Because the guard never examined the joined token, it never saw -u on the denylist and silently allowed execution. This bypass was introduced by the incomplete scope of commit e8d0fbf7, which hardened only the split_single_char_options=True path.

RemediationAI

Upgrade GitPython to version 3.1.58 via pip (pip install --upgrade 'gitpython>=3.1.58'), which corrects the _option_candidates() logic to derive value-token candidates regardless of the split_single_char_options setting. The upstream patch is confirmed at https://github.com/gitpython-developers/GitPython/commit/96a888f4d782cb2f80452148e48e60ce4af6d541 and the associated pull request is at https://github.com/gitpython-developers/GitPython/pull/2204. If immediate upgrade is not feasible, the most effective compensating control is to audit all application code paths that invoke GitPython guarded methods and ensure user-controlled input cannot influence the kwargs dictionary passed to those methods - particularly preventing external callers from setting split_single_char_options=False or supplying arbitrary single-character kwarg keys. Restricting the set of allowed kwarg keys to an explicit allowlist at the application layer removes the bypass precondition entirely, though this requires application-level code changes. Do not rely on allow_unsafe_options=False as a mitigation since this vulnerability bypasses the guard that enforces that setting. The full advisory is at https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-wvpp-8hx9-p66j.

CVE-2022-24439 CRITICAL POC
9.8 Dec 06

All versions of package gitpython are vulnerable to Remote Code Execution (RCE) due to improper user input validation, w

CVE-2023-40590 HIGH POC
7.8 Aug 28

GitPython is a python library used to interact with Git repositories. Rated high severity (CVSS 7.8), this vulnerability

CVE-2026-78679 HIGH POC
7.1 Aug 25

Arbitrary file read in GitPython before 3.1.59 allows low-privileged remote attackers to exfiltrate sensitive files by s

CVE-2023-41040 MEDIUM POC
6.5 Aug 30

GitPython is a python library used to interact with Git repositories. Rated medium severity (CVSS 6.5), this vulnerabili

CVE-2023-40267 CRITICAL
9.8 Aug 11

GitPython before 3.1.32 does not block insecure non-multi options in clone and clone_from. Rated critical severity (CVSS

CVE-2026-78676 CRITICAL POC
9.3 Aug 25

Arbitrary code execution in GitPython before 3.1.59 arises from unsafe re-serialization of multi-line, quoted git-config

CVE-2026-67324 CRITICAL
9.3 Aug 01

Command execution in GitPython 3.1.50 arises because its default unsafe-option gate fails to recognize joined short-opti

CVE-2026-67325 HIGH POC
8.7 Aug 01

Command injection in GitPython before 3.1.51 allows low-privileged attackers to bypass the `check_unsafe_options` blockl

CVE-2026-42215 HIGH POC
8.8 May 07

Command injection in GitPython 3.1.30-3.1.46 allows remote authenticated attackers to execute arbitrary commands via und

CVE-2026-67323 HIGH POC
8.6 Aug 01

Command injection and arbitrary file overwrite in GitPython before 3.1.51 expose applications that pass attacker-control

CVE-2026-73625 HIGH
8.7 Aug 13

Remote code execution in GitPython before 3.1.54 exploits a guard bypass in check_unsafe_options where the validation lo

CVE-2026-78677 HIGH POC
8.7 Aug 25

Arbitrary directory creation and potential hook-based code execution in GitPython affects all releases before 3.1.59. Th

Vendor StatusVendor

SUSE

Severity: Important
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise High Performance Computing 15 SP7 Affected
SUSE Linux Enterprise Module for Python 3 15 SP7 Affected
SUSE Linux Enterprise Server 15 SP7 Affected
SUSE Linux Enterprise Server 16.0 Affected

Share

CVE-2026-76220 vulnerability details – vuln.today

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