{"id":"CVE-2026-114145","summary":"GitPython validates a submodule's \".git\" path only after cloning into it (RCE)","details":"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.","aliases":["GHSA-83vg-56qc-22m7"],"modified":"2026-10-22T10:46:05.903036673Z","published":"2026-10-21T20:35:06.548Z","database_specific":{"osv_generated_from":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/114xxx/CVE-2026-114145.json","cna_assigner":"GitHub_M","cwe_ids":["CWE-696"]},"references":[{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/114xxx/CVE-2026-114145.json"},{"type":"FIX","url":"https://github.com/gitpython-developers/GitPython/commit/97eadb888d2f99567e3113f4e455be4ca128f697"},{"type":"FIX","url":"https://github.com/gitpython-developers/GitPython/pull/2264"},{"type":"WEB","url":"https://github.com/gitpython-developers/GitPython/releases/tag/3.2.1"},{"type":"ADVISORY","url":"https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-83vg-56qc-22m7"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-114145"}],"affected":[{"ranges":[{"type":"GIT","repo":"https://github.com/gitpython-developers/gitpython","events":[{"introduced":"0"},{"fixed":"c179357b38a8962f1c8e33153ac58b5ac0e6e96a"},{"fixed":"97eadb888d2f99567e3113f4e455be4ca128f697"}],"database_specific":{"extracted_events":[{"source":"AFFECTED_FIELD","strategy":"StringRangeExpression","range":[{"introduced":"0"},{"fixed":"3.2.1"}]},{"range":[{"fixed":"97eadb888d2f99567e3113f4e455be4ca128f697"}],"source":"REFERENCES_COMMIT"},{"original_tag":"3.2.1","range":[{"fixed":"c179357b38a8962f1c8e33153ac58b5ac0e6e96a"}],"source":"REFERENCES_TAG"}]}}],"versions":["3.1.57","3.1.56","3.1.55","3.1.54","3.1.53","3.1.52","3.1.51","3.1.50","3.1.49","3.1.48","3.1.47","3.1.44","3.1.43","3.1.42","3.1.41","3.1.40","3.1.38","3.1.35","3.1.34","3.1.33","3.1.32","3.1.31","3.1.30","3.1.29","3.1.28","3.1.27","3.1.26","3.1.25","3.1.24","3.1.23","3.1.22","3.1.20","3.1.19","3.1.18","3.1.17","3.1.16","3.1.13","3.1.12","3.1.11","3.1.10","3.1.9","3.1.8","3.1.7","3.1.6","3.1.5","3.1.4","3.1.3","3.1.2","3.1.1","3.1.0","3.0.9","3.0.8","3.0.7","3.0.6","3.0.5","3.0.4","3.0.3","3.0.2","3.0.1","2.1.13","3.0.0","2.1.12","2.1.11","2.1.10","2.1.9","2.1.8","2.1.6","2.1.5","2.1.4","2.1.3","2.1.2","2.1.1","2.1.0","2.0.9","winerr_show","2.0.8","2.0.7","2.0.6","2.0.5","2.0.4","2.0.3","2.0.2","2.0.1","2.0.0","0.3.2.1","1.0.2","0.3.7","1.0.1","1.0.0","0.3.6","0.3.5","0.3.4","0.3.3","0.3.2","0.3.2-RC1","0.3.1-beta2","0.3.1-beta1","0.3.0-beta2","0.3.0-beta1","0.2.0-beta1","0.1.6","0.1.5","0.1.4","0.1.4-pre"],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-114145.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V3","score":"CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:H"}]}