Description
GitPython is a python library used to interact with Git repositories. Prior to 3.2.1, create_submodule() in git/objects/submodule/base.py accepts an attacker-influenced submodule path such as .git/hooks and invokes _clone_repo() before safely rejecting the destination. In 3.1.x, _validate_repo_path() does not exist and the call succeeds silently, while in 3.2.0 and later affected revisions the check in git/index/base.py raises ValueError only after the clone has written to disk and does not remove the planted file. An attacker-controlled submodule can therefore place an executable post-checkout hook that a later Git operation executes. Exploitation requires an application to accept an untrusted submodule path and a clone destination such as .git/hooks that is empty enough for Git to clone into it, which commonly means that default sample hooks are absent. This issue is fixed in version 3.2.1.
Published: 2026-10-21
Score: 7.5 High
EPSS: < 1% Very Low
KEV: No
Impact: Remote Code Execution
Action: Apply patch
AI Analysis

Impact

GitPython rejected submodule paths containing the string .git/hooks too late in the cloning process, allowing an attacker to plant a malicious post‑checkout hook before the path validation occurs. Because the hook is written to the repository’s hooks directory, any subsequent Git operation that triggers post‑checkout runs the attacker‑provided code, giving remote code execution. The weakness is a logic error in input handling (CWE‑696) and a path traversal vulnerability (CWE‑73). The attacker does not need elevated privileges; the vulnerability is exercised by any process that calls create_submodule with a path that includes a sub‑directory of .git, such as .git/hooks.

Affected Systems

GitPython, the python library used to interact with Git repositories, is affected in all releases prior to 3.2.1. Versions 3.1.x and the 3.2.0 series contain a flawed _validate_repo_path routine that only raises an error after the repository has been cloned, while the check in git/index/base.py fails to roll back the planted hook file.

Risk and Exploitability

The vulnerability carries a CVSS score of 7.5, indicating high severity. The EPSS score is <1%, indicating a very low probability of exploitation, but the attack requires the application to accept submodule paths that place files in .git/hooks and that the destination directory is empty enough for a clone. Because the flaw manifests only when the target application allows an attacker‑controlled submodule path, exploitation is feasible in environments where untrusted repositories are integrated. The issue is not listed in CISA’s KEV catalog, so no active exploits are formally documented. Once the library is updated or submodule paths are sanitized, the risk is eliminated.

Generated by OpenCVE AI on October 22, 2026 at 15:43 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade GitPython to version 3.2.1 or later.
  • Validate or whitelist submodule paths before invoking create_submodule, ensuring that paths do not traverse into .git or its hooks directory.
  • Remove or inhibit execution of post‑checkout hooks in the repository by cleaning or disabling the .git/hooks directory.

Generated by OpenCVE AI on October 22, 2026 at 15:43 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Debian DLA Debian DLA DLA-4872-1 python-git security update
Github GHSA Github GHSA GHSA-83vg-56qc-22m7 GitPython validates a submodule's ".git" path only after cloning into it (RCE)
History

Sun, 25 Oct 2026 07:15:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'none', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Thu, 22 Oct 2026 12:30:00 +0000

Type Values Removed Values Added
Weaknesses CWE-73
References
Metrics threat_severity

None

threat_severity

Important


Thu, 22 Oct 2026 10:45:00 +0000

Type Values Removed Values Added
First Time appeared Gitpython-developers
Gitpython-developers gitpython
Vendors & Products Gitpython-developers
Gitpython-developers gitpython

Wed, 21 Oct 2026 21:00:00 +0000

Type Values Removed Values Added
Description GitPython is a python library used to interact with Git repositories. Prior to 3.2.1, create_submodule() in git/objects/submodule/base.py accepts an attacker-influenced submodule path such as .git/hooks and invokes _clone_repo() before safely rejecting the destination. In 3.1.x, _validate_repo_path() does not exist and the call succeeds silently, while in 3.2.0 and later affected revisions the check in git/index/base.py raises ValueError only after the clone has written to disk and does not remove the planted file. An attacker-controlled submodule can therefore place an executable post-checkout hook that a later Git operation executes. Exploitation requires an application to accept an untrusted submodule path and a clone destination such as .git/hooks that is empty enough for Git to clone into it, which commonly means that default sample hooks are absent. This issue is fixed in version 3.2.1.
Title GitPython validates a submodule's ".git" path only after cloning into it (RCE)
Weaknesses CWE-696
References
Metrics cvssV3_1

{'score': 7.5, 'vector': 'CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H'}


Subscriptions

Gitpython-developers Gitpython
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-10-23T15:08:48.132Z

Reserved: 2026-10-20T21:53:58.474Z

Link: CVE-2026-114145

cve-icon Vulnrichment

Updated: 2026-10-23T14:54:13.491Z

cve-icon NVD

Status : Awaiting Analysis

Published: 2026-10-21T21:17:57.250

Modified: 2026-10-23T15:17:25.770

Link: CVE-2026-114145

cve-icon Redhat

Severity : Important

Publid Date: 2026-10-21T20:35:06Z

Links: CVE-2026-114145 - Bugzilla

cve-icon OpenCVE Enrichment

Updated: 2026-10-22T15:45:08Z

Weaknesses
  • CWE-696

    Incorrect Behavior Order

  • CWE-73

    External Control of File Name or Path