Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain low-privilege application access
-
DeliveryIdentify endpoint invoking Repo.blame() with user-supplied revision
-
ExploitCraft revision string --contents=/etc/passwd
-
ExecutionSubmit request bypassing incomplete denylist
-
PersistGit reads target file via option injection
-
ImpactExfiltrate file contents from blame response
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Argument sanitization
|
| Exploitation Conditions | Exploitation requires three concurrent conditions: (1) the target application uses GitPython's Repo.blame() method, (2) user-controlled input is passed as the revision argument without independent sanitization - specifically, the application does not validate that the revision matches a safe format before calling GitPython, and (3) the attacker holds at least low-privilege access to invoke the blame functionality (confirmed by PR:L in the CVSS 4.0 vector). The attacker must be able to supply a string beginning with --contents=<filepath> or -S <filepath> as the revision value. Exploitation is strictly bounded by the PR:L requirement: unauthenticated external attackers cannot exploit this without first obtaining application-level access. Confidentiality impact is high but scoped to files readable by the process user; there is no integrity (VI:N) or availability (VA:N) impact per the CVSS vector. Deployments that do not expose Repo.blame() to user-controlled revision input, or that independently validate revision format, are not exploitable. |
| Impact | The CVSS 4.0 base score of 7.1 (AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N) reflects a realistic and constrained threat: network-accessible, low-complexity exploitation requiring only low-privilege application access, yielding high confidentiality impact. The PR:L requirement is the most meaningful limiting factor - an unauthenticated attacker cannot reach Repo.blame() without first obtaining application-level credentials or a session. The vulnerability is not listed in CISA KEV and no public exploit code has been identified, reducing urgency compared to actively-exploited issues. EPSS score data was absent from the provided intelligence, so probability-of-exploitation cannot be precisely quantified. However, the denylist gap is structurally simple to abuse - --contents and -S are standard documented git options that were merely overlooked - meaning that once an attacker has the necessary access, no specialized knowledge or tooling is required. Web applications and CI/CD services that expose git blame to user-supplied revision input represent the highest-risk deployment pattern and should treat this as an upgrade priority rather than a deferred backlog item. |
| Exploit ScenarioDerived | An attacker with authenticated access to a web application that internally calls Repo.blame() with a user-supplied revision string submits a request where the revision is set to --contents=/etc/passwd. GitPython passes this string unsanitized to git blame, which interprets it as an option rather than a commit reference and reads /etc/passwd, returning its contents embedded in the blame output to the application - and ultimately to the attacker. No public exploit code has been identified, but the attack requires only a standard HTTP request with a crafted parameter value. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 25, 2026
Arbitrary file read in GitPython versions before 3.1.59 exposes sensitive filesystem content to low-privileged network attackers through an incomplete argument-injection guard. The unsafe_git_revision_options denylist in Repo.blame() omits the --contents and -S git options, allowing attackers to supply revision values such as --contents=/etc/passwd and receive the target file's contents embedded in the blame output. No public exploit has been identified at time of analysis, but the bypass is conceptually trivial - a crafted string is all that is required once access to the blame API is established.
RemediationAI
Upgrade GitPython to version 3.1.59 or later, which corrects the incomplete denylist by adding --contents and -S to the blocked revision options in the unsafe_git_revision_options guard. Full details are in the maintainer advisory at https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-5xxx-qhh7-9287. If an immediate upgrade is not feasible, implement application-layer input validation before any user-controlled data reaches Repo.blame(): adopt an explicit allowlist restricting revision arguments to known-safe formats (full 40-character commit SHAs, alphanumeric branch or tag names, and refs/ prefixes) rather than relying on a secondary denylist, which is the approach that introduced this vulnerability. This allowlist approach carries a trade-off - unusually formatted but legitimate ref names could be rejected - so testing against the application's real revision input patterns before deployment is advised. The upgrade path is low-cost and should be preferred.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in pypi
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
GitPython (CPE: cpe:2.3:a:gitpython-developers:gitpython:*:*:*:*:*:*:*:*) is a Python library that wraps Git subprocess calls to provide repository interaction. The vulnerability class is CWE-88 (Argument Injection or Modification): user-controlled data is incorporated into subprocess arguments without exhaustive sanitization. The affected guard, unsafe_git_revision_options, maintains a denylist of dangerous git options, but omits --contents and -S. In git-blame, --contents instructs git to treat the specified file path as the working-tree content source, and -S supplies a revs file - both cause git to read arbitrary filesystem paths, with the output surfaced through the Python blame result returned to the caller. Any application that forwards user input as the revision parameter to Repo.blame() without independent validation is directly exposed.
Know when Gitpython gets its next vulnerability
- 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:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
Network-reachable via application layer; low privilege required to invoke blame; pure confidentiality impact via arbitrary file read with no integrity or availability effect.
AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
GitPython versions before 3.1.59 contain an incomplete denylist in the unsafe_git_revision_options guard that omits --contents and -S options, allowing attackers to read arbitrary files by passing these options to Repo.blame(). Attackers can supply revision values like --contents=/etc/passwd to leak file contents through the blame result returned to the caller.
Blast Radius
ecosystem impact- 16 pypi packages depend on gitpython (13 direct, 3 indirect)
Ecosystem-wide dependent count for version 3.1.59.
Executive ViewAI
GitPython before version 3.1.59 contains an arbitrary file read vulnerability that allows attackers with access to the blame API to extract sensitive filesystem contents, such as credentials and configuration files. No public exploit identified at time of analysis, though the bypass is conceptually straightforward. Organizations relying on GitPython for version control operations face significant risk of sensitive data exposure on affected systems.
No vendor-released patch identified at time of analysis. Interim mitigations: (1) Restrict network access to GitPython-dependent systems to only authorized users; (2) Disable Repo.blame() functionality if not required for operations; (3) Implement input validation on any user-supplied data passed to blame API calls; (4) Enable detailed audit logging of all blame API access for threat detection.
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
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Related Vulnerabilities in GitPython Argument Injection and File Read Flaws
View all 5All versions of package gitpython are vulnerable to Remote Code Execution (RCE) due to improper user input validation, w
GitPython is a python library used to interact with Git repositories. Rated high severity (CVSS 7.8), this vulnerability
GitPython is a python library used to interact with Git repositories. Rated medium severity (CVSS 6.5), this vulnerabili
GitPython before 3.1.32 does not block insecure non-multi options in clone and clone_from. Rated critical severity (CVSS
Command execution in GitPython 3.1.50 arises because its default unsafe-option gate fails to recognize joined short-opti
Command injection in GitPython before 3.1.51 allows low-privileged attackers to bypass the `check_unsafe_options` blockl
Command injection in GitPython 3.1.30-3.1.46 allows remote authenticated attackers to execute arbitrary commands via und
Command injection and arbitrary file overwrite in GitPython before 3.1.51 expose applications that pass attacker-control
Same technique Information Disclosure
View allVendor StatusVendor
SUSE
Severity: Moderate| Product | Status |
|---|---|
| openSUSE Tumbleweed | Fixed |
| SUSE Linux Enterprise High Performance Computing 15 SP4-ESPOS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP4-LTSS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP5-ESPOS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP5-LTSS | Affected |
| SUSE Linux Enterprise Module for Python 3 15 SP7 | Affected |
| SUSE Linux Enterprise Server 15 SP7 | Affected |
| SUSE Linux Enterprise Desktop 15 SP7 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP7 | Affected |
| SUSE Linux Enterprise Server 15 SP4-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP4-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP5-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP5-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP6-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP6-LTSS | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP4 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP5 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP6 | Affected |
| SUSE Linux Enterprise Desktop 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 |
| SUSE Linux Enterprise Server 16.1 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP7 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.0 | Affected |
| SUSE Linux Enterprise Server for SAP applications 16.1 | Affected |
| openSUSE Leap 16.0 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP4-LTSS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP5 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP5-LTSS | Affected |
| SUSE Linux Enterprise Module for Python 3 15 SP4 | Affected |
| SUSE Linux Enterprise Module for Python 3 15 SP5 | Affected |
| SUSE Linux Enterprise Module for Python 3 15 SP6 | Affected |
| SUSE Linux Enterprise Server 15 SP4 | Affected |
| SUSE Linux Enterprise Server 15 SP4-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP5 | Affected |
| SUSE Linux Enterprise Server 15 SP5-LTSS | Affected |
| SUSE Linux Enterprise Server 15 SP6 | Affected |
| SUSE Linux Enterprise Server 15 SP6-LTSS | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP4 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP5 | Affected |
| SUSE Linux Enterprise Server for SAP Applications 15 SP6 | Affected |
| SUSE Linux Enterprise Desktop 15 SP4 | Affected |
| SUSE Linux Enterprise Desktop 15 SP5 | Affected |
| SUSE Linux Enterprise Desktop 15 SP6 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP4 | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP4-ESPOS | Affected |
| SUSE Linux Enterprise High Performance Computing 15 SP5-ESPOS | Affected |
| SUSE Manager Proxy 4.3 | Affected |
| SUSE Manager Retail Branch Server 4.3 | Affected |
| SUSE Manager Server 4.3 | Affected |
| openSUSE Leap 15.4 | Affected |
| openSUSE Leap 15.5 | Affected |
| openSUSE Leap 15.6 | Affected |
EUVD-2026-65224
GHSA-5xxx-qhh7-9287
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB