[ CVE-2026-114145 · Published 21 Oct 2026 ]

GitPython validates a submodule's ".git" path only after cloning into it (RCE)

CVSS 7.5 EPSS <1%Fix available

[ Description ]Official 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.

[ Fixes ]Fixes and patches

  • Gitpython 3.2.1Fixed version · GitHub Advisories · pip package Gitpython: upgrade to 3.2.1 or later (affected <= 3.2.0)

[ Packages ]Affected open-source packages