CVE-2026-67324
GitPython 3.1.50 Authentication Bypass via Joined Short Options
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.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
9.3
GitPython 3.1.50 Authentication Bypass via Joined Short Options
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.
- Record
CVE-2026-67324- CVSS 4.0
- 9.3 Critical
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - CVSS 3.1
- 9.8 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-78
- Updated
- 2026-11-02
EUVDEUVD-2026-51808
9.3
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.
- Record
EUVD-2026-51808- CVSS 4.0
- 9.3 Critical
CVSS:4.0/AV:N/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-cw2r-r7mw-j3hc
9.3
Duplicate Advisory: GitPython unsafe clone option gate bypass through joined short options
Duplicate Advisory
This advisory has been withdrawn because it is a duplicate of GHSA-v396-v7q4-x2qj. This link is maintained to preserve external references.
Original Description
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.
- Record
GHSA-cw2r-r7mw-j3hc- CVSS 4.0
- 9.3 Critical
CVSS: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 - CVSS 3.1
- 9.8 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-78
- Updated
- 2026-11-02
GitHub AdvisoriesGHSA-v396-v7q4-x2qj
8.7
GitPython unsafe clone option gate bypass through joined short options
GitPython version 3.1.50 blocks unsafe git clone options such as --upload-pack, -u, --config, and -c unless callers explicitly pass allow_unsafe_options=True. However, the default unsafe-option gate does not recognize joined short-option forms such as -u/path/to/helper.
Git itself accepts -u<upload-pack> as the short form of --upload-pack=<upload-pack>. As a result, Repo.clone_from(..., multi_options=["-u<helper>"], allow_unsafe_options=False) can execute the helper command even though the equivalent long option is blocked.
Affected package:
- Ecosystem: PyPI
- Package:
GitPython - Confirmed affected version:
3.1.50 - Repository:
gitpython-developers/GitPython - Current PyPI version during triage:
3.1.50
Relevant behavior:
Repo.unsafe_git_clone_optionscorrectly lists--upload-pack,-u,--config, and-cas unsafe clone options.Repo._clone()splitsmulti_optionswithshlex.split(" ".join(multi_options))and then callsGit.check_unsafe_options(...)._canonicalize_option_name("-u/path/to/helper")returns a string beginning withu..., not the canonical short optionu, so it does not match the blocked-uentry.- Git accepts the same joined short option as
--upload-pack=<helper>and executes the helper during clone.
Preconditions:
An application must pass attacker-influenced clone options into Repo.clone_from(..., multi_options=...) while relying on GitPython's default unsafe-option gate to block command-executing options.
The local PoC uses only a local bare Git repository and a local helper script. It does not contact any third-party service.
Local reproduction:
The PoC creates a disposable bare Git repository, a helper script, and a sentinel file path. It first confirms that the long --upload-pack=<helper> form is blocked by GitPython. It then calls Repo.clone_from(..., multi_options=["-u<helper>"], allow_unsafe_options=False).
Observed sanitized output:
gitpython_version=3.1.50
git_version=git version 2.53.0.windows.1
tmp_dir=<tmp>
long_upload_pack_gate=BLOCKED:UnsafeOptionError
joined_short_upload_pack_gate=ALLOWED
clone_result=EXPECTED_EXCEPTION:GitCommandError
sentinel_exists=True
sentinel_text=GITPYTHON_UNSAFE_OPTION_BYPASS
The clone fails because the helper exits nonzero, but the sentinel file proves that Git executed the helper despite allow_unsafe_options=False.
Impact:
An attacker who controls multi_options can bypass GitPython's default allow_unsafe_options=False protection and execute a local command via Git's --upload-pack / -u clone option. This is a residual bypass of an explicit GitPython security boundary, not merely a case where a caller opted into unsafe behavior.
Duplicate / related advisory checks:
- OSV query for
PyPI/GitPythonversion3.1.50returned no vulnerabilities. - The repository's public advisories include related unsafe Git option issues, including
GHSA-x2qx-6953-8485/CVE-2026-42284andGHSA-rpm5-65cw-6hj4/CVE-2026-42215. Their public affected ranges are marked as fixed before 3.1.50. GHSA-x2qx-6953-8485describes validatingmulti_optionsbeforeshlex.split(...). GitPython 3.1.50 now validates after splitting, but the joined short option-u<value>still bypasses because the validator canonicalizes it tou<value>rather thanu.GHSA-rpm5-65cw-6hj4describes unsafe underscored kwargs such asupload_pack=.... The current PoC usesmulti_options=["-u<helper>"]against 3.1.50 and does not depend on underscored kwargs.- GitHub issue search for
upload-pack unsafe optionsfound historical related items, including CVE-2022-24439 and the earlier unsafe-options gate work, but no public issue describing this current joined-short-option residual bypass in 3.1.50. - GitHub issue search for
multi_options unsafefound PR #2130, which fixed splitting ofmulti_optionsbefore checking. The current issue remains after that split because-u<value>is treated as…
- Record
GHSA-v396-v7q4-x2qj- CVSS 4.0
- 8.7 High
CVSS: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
NVD
9.3
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.
- Record
CVE-2026-67324- CVSS 4.0
- 9.3 Critical
CVSS: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 - CVSS 3.1
- 9.8 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-78
- Updated
- 2026-11-02
OSV
9.3
GitPython 3.1.50 Authentication Bypass via Joined Short Options
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.
- Record
CVE-2026-67324- CVSS 4.0
- 9.3 Critical
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - Weakness
- CWE-78
- Updated
- 2026-11-02
Show 11 moreShow less
OSVDEBIAN-CVE-2026-67324
9.3
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.
- Record
DEBIAN-CVE-2026-67324- CVSS 4.0
- 9.3 Critical
CVSS: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
OSVGHSA-cw2r-r7mw-j3hc
9.3
Duplicate Advisory: GitPython unsafe clone option gate bypass through joined short options
Duplicate Advisory
This advisory has been withdrawn because it is a duplicate of GHSA-v396-v7q4-x2qj. This link is maintained to preserve external references.
Original Description
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.
- Record
GHSA-cw2r-r7mw-j3hc- CVSS 4.0
- 9.3 Critical
CVSS: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 - CVSS 3.1
- 9.8 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-78
- Updated
- 2026-11-02
OSVGHSA-v396-v7q4-x2qj
8.7
GitPython unsafe clone option gate bypass through joined short options
GitPython version 3.1.50 blocks unsafe git clone options such as --upload-pack, -u, --config, and -c unless callers explicitly pass allow_unsafe_options=True. However, the default unsafe-option gate does not recognize joined short-option forms such as -u/path/to/helper.
Git itself accepts -u<upload-pack> as the short form of --upload-pack=<upload-pack>. As a result, Repo.clone_from(..., multi_options=["-u<helper>"], allow_unsafe_options=False) can execute the helper command even though the equivalent long option is blocked.
Affected package:
- Ecosystem: PyPI
- Package:
GitPython - Confirmed affected version:
3.1.50 - Repository:
gitpython-developers/GitPython - Current PyPI version during triage:
3.1.50
Relevant behavior:
Repo.unsafe_git_clone_optionscorrectly lists--upload-pack,-u,--config, and-cas unsafe clone options.Repo._clone()splitsmulti_optionswithshlex.split(" ".join(multi_options))and then callsGit.check_unsafe_options(...)._canonicalize_option_name("-u/path/to/helper")returns a string beginning withu..., not the canonical short optionu, so it does not match the blocked-uentry.- Git accepts the same joined short option as
--upload-pack=<helper>and executes the helper during clone.
Preconditions:
An application must pass attacker-influenced clone options into Repo.clone_from(..., multi_options=...) while relying on GitPython's default unsafe-option gate to block command-executing options.
The local PoC uses only a local bare Git repository and a local helper script. It does not contact any third-party service.
Local reproduction:
The PoC creates a disposable bare Git repository, a helper script, and a sentinel file path. It first confirms that the long --upload-pack=<helper> form is blocked by GitPython. It then calls Repo.clone_from(..., multi_options=["-u<helper>"], allow_unsafe_options=False).
Observed sanitized output:
gitpython_version=3.1.50
git_version=git version 2.53.0.windows.1
tmp_dir=<tmp>
long_upload_pack_gate=BLOCKED:UnsafeOptionError
joined_short_upload_pack_gate=ALLOWED
clone_result=EXPECTED_EXCEPTION:GitCommandError
sentinel_exists=True
sentinel_text=GITPYTHON_UNSAFE_OPTION_BYPASS
The clone fails because the helper exits nonzero, but the sentinel file proves that Git executed the helper despite allow_unsafe_options=False.
Impact:
An attacker who controls multi_options can bypass GitPython's default allow_unsafe_options=False protection and execute a local command via Git's --upload-pack / -u clone option. This is a residual bypass of an explicit GitPython security boundary, not merely a case where a caller opted into unsafe behavior.
Duplicate / related advisory checks:
- OSV query for
PyPI/GitPythonversion3.1.50returned no vulnerabilities. - The repository's public advisories include related unsafe Git option issues, including
GHSA-x2qx-6953-8485/CVE-2026-42284andGHSA-rpm5-65cw-6hj4/CVE-2026-42215. Their public affected ranges are marked as fixed before 3.1.50. GHSA-x2qx-6953-8485describes validatingmulti_optionsbeforeshlex.split(...). GitPython 3.1.50 now validates after splitting, but the joined short option-u<value>still bypasses because the validator canonicalizes it tou<value>rather thanu.GHSA-rpm5-65cw-6hj4describes unsafe underscored kwargs such asupload_pack=.... The current PoC usesmulti_options=["-u<helper>"]against 3.1.50 and does not depend on underscored kwargs.- GitHub issue search for
upload-pack unsafe optionsfound historical related items, including CVE-2022-24439 and the earlier unsafe-options gate work, but no public issue describing this current joined-short-option residual bypass in 3.1.50. - GitHub issue search for
multi_options unsafefound PR #2130, which fixed splitting ofmulti_optionsbefore checking. The current issue remains after that split because-u<value>is treated as…
- Record
GHSA-v396-v7q4-x2qj- CVSS 4.0
- 8.7 High
CVSS: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
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 Critical
CVSS: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 Critical
CVSS: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 Critical
CVSS: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-3947
9.3
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.
- Record
PYSEC-2026-3947- CVSS 4.0
- 9.3 Critical
CVSS: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
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 High
CVSS: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 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-67324
9.3
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.
- Record
UBUNTU-CVE-2026-67324- CVSS 4.0
- 9.3 Critical
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N - CVSS 3.1
- 9.8 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H - Updated
- 2026-11-02
OSVROOT-APP-PYPI-GHSA-v396-v7q4-x2qj No score
GHSA-v396-v7q4-x2qj in GitPython - Patched by Root
Root has patched GHSA-v396-v7q4-x2qj in the GitPython package for Root:PyPI. Multiple fixed versions available.
- Record
ROOT-APP-PYPI-GHSA-v396-v7q4-x2qj- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
gitpythonPyPI |
3.1.50 to 3.1.50 | 3.1.51 |
python-gitDebian:12 |
before 3.1.30-1+deb12u3, plus listed versions 3.1.30-13.1.30-1+deb12u2 |
3.1.30-1+deb12u3 |
python-gitDebian:13 |
before 3.1.44-1+deb13u1, plus listed versions 3.1.44-1 |
3.1.44-1+deb13u1 |
python-gitDebian: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 |
gitpythonPyPI |
3.1.50 up to 3.1.51 | 3.1.51 |
python-GitPythonopenEuler:24.03-LTS-SP4 From an advisory covering 5 CVEs |
before 3.1.52-1.oe2403sp4 | 3.1.52-1.oe2403sp4 |
python-GitPythonopenEuler:24.03-LTS-SP1 From an advisory covering 5 CVEs |
before 3.1.52-1.oe2403sp1 | 3.1.52-1.oe2403sp1 |
python-GitPythonopenEuler:24.03-LTS-SP3 From an advisory covering 5 CVEs |
before 3.1.52-1.oe2403sp3 | 3.1.52-1.oe2403sp3 |
python3.12-djangoRed 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-djangoRed 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 |
Show 38 moreShow less
| Package | Affected | Fixed |
|---|---|---|
python3.12-djangoRed 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-djangoRed 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-towerRed 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-towerRed 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-serverRed 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-serverRed 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-cliRed 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-cliRed 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-cliRed 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-cliRed 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-gitpythonRed 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-gitpythonRed 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-aiohttpRed 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-aiohttpRed 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-uiRed 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-djangoRed 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-djangoRed 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-djangoRed 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-djangoRed 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-djangoRed 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-djangoRed 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-towerRed 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-cliRed 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-cliRed 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-gitpythonRed 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-aiohttpRed 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-debuginfoRed 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-debugsourceRed 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 |
GitPythonRoot:PyPI |
before 3.1.50+aikido.1 | 3.1.50+aikido.13.1.50+aikido.23.1.50+aikido.3 |
rootio-GitPythonRoot:PyPI |
before 3.1.50+root.io.1 | 3.1.50+root.io.1 |
python-gitUbuntu: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-gitUbuntu: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-gitUbuntu: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-gitUbuntu: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-gitUbuntu: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-gitUbuntu: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-gitUbuntu:26.10 |
All versions, plus listed versions 3.1.46-13.1.50-13.1.61-1 |
None known |
python-gitUbuntu: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 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, facts | ||
| affected | ||
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-67324 is a critical vulnerability (CVSS 9.3) 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 0.45%, the 39th percentile. Fixed in gitpython 3.1.51.
References
github.com/gitpython-developers/GitPython/security/advisories/GHSA-v396-v7q4-x2qj
vulncheck.com/advisories/gitpython-authentication-bypass-via-joined-short-options
nvd.nist.gov/vuln/detail/CVE-2026-67324
github.com/advisories/GHSA-cw2r-r7mw-j3hc
github.com/gitpython-developers/GitPython/pull/2162
github.com/gitpython-developers/GitPython/releases/tag/3.1.51
Show 139 moreShow less
github.com/advisories/GHSA-v396-v7q4-x2qj
github.com/CVEProject/cvelistV5/tree/main/cves/2026/67xxx/CVE-2026-67324.json
security-tracker.debian.org/tracker/CVE-2026-67324
github.com/gitpython-developers/GitPython
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-3249
nvd.nist.gov/vuln/detail/CVE-2026-67322
nvd.nist.gov/vuln/detail/CVE-2026-67323
nvd.nist.gov/vuln/detail/CVE-2026-67325
nvd.nist.gov/vuln/detail/CVE-2026-67326
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-3250
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-3251
access.redhat.com/errata/RHSA-2026:59135
access.redhat.com/security/updates/classification
docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.5/html/release_notes/patch_releases
docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.5
bugzilla.redhat.com/show_bug.cgi?id=2456187
bugzilla.redhat.com/show_bug.cgi?id=2484099
bugzilla.redhat.com/show_bug.cgi?id=2486729
bugzilla.redhat.com/show_bug.cgi?id=2487946
bugzilla.redhat.com/show_bug.cgi?id=2500041
bugzilla.redhat.com/show_bug.cgi?id=2509975
bugzilla.redhat.com/show_bug.cgi?id=2509976
bugzilla.redhat.com/show_bug.cgi?id=2510021
bugzilla.redhat.com/show_bug.cgi?id=2510032
bugzilla.redhat.com/show_bug.cgi?id=2510825
bugzilla.redhat.com/show_bug.cgi?id=2510831
bugzilla.redhat.com/show_bug.cgi?id=2511095
bugzilla.redhat.com/show_bug.cgi?id=2511900
bugzilla.redhat.com/show_bug.cgi?id=2511901
bugzilla.redhat.com/show_bug.cgi?id=2511902
bugzilla.redhat.com/show_bug.cgi?id=2515261
security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_59135.json
access.redhat.com/security/cve/CVE-2026-15307
cve.org/CVERecord?id=CVE-2026-15307
nvd.nist.gov/vuln/detail/CVE-2026-15307
docs.djangoproject.com/en/dev/releases/security
github.com/django/django/commit/115ffd0463a765ab1cc93de18e94b5459b8a300e
github.com/django/django/commit/208f80cb682868b584ed0a78f23e4ba6304212aa
github.com/django/django/commit/39b3e2d0c743a338def6c473086ebc06865e86b6
github.com/django/django/commit/f1949c1f9758947ade984c895ff16bef46f56520
groups.google.com/g/django-announce
djangoproject.com/weblog/2026/aug/04/security-releases
access.redhat.com/security/cve/CVE-2026-34993
cve.org/CVERecord?id=CVE-2026-34993
nvd.nist.gov/vuln/detail/CVE-2026-34993
github.com/aio-libs/aiohttp/commit/dcf40f30637e8752c76781cf6703b5a236749a00
github.com/aio-libs/aiohttp/security/advisories/GHSA-jg22-mg44-37j8
access.redhat.com/security/cve/CVE-2026-39373
cve.org/CVERecord?id=CVE-2026-39373
nvd.nist.gov/vuln/detail/CVE-2026-39373
github.com/latchset/jwcrypto/security/advisories/GHSA-fjrm-76x2-c4q4
access.redhat.com/security/cve/CVE-2026-44705
cve.org/CVERecord?id=CVE-2026-44705
nvd.nist.gov/vuln/detail/CVE-2026-44705
github.com/raszi/node-tmp/security/advisories/GHSA-ph9p-34f9-6g65
access.redhat.com/security/cve/CVE-2026-52902
cve.org/CVERecord?id=CVE-2026-52902
nvd.nist.gov/vuln/detail/CVE-2026-52902
access.redhat.com/security/cve/CVE-2026-59886
cve.org/CVERecord?id=CVE-2026-59886
nvd.nist.gov/vuln/detail/CVE-2026-59886
github.com/pyasn1/pyasn1/commit/e60c691cb91addb8fcefa2f537e85ede6fb1e886
github.com/pyasn1/pyasn1/releases/tag/v0.6.4
github.com/pyasn1/pyasn1/security/advisories/GHSA-hm4w-wwcw-mr6r
access.redhat.com/security/cve/CVE-2026-67322
cve.org/CVERecord?id=CVE-2026-67322
github.com/gitpython-developers/GitPython/security/advisories/GHSA-rwj8-pgh3-r573
vulncheck.com/advisories/gitpython-before-environment-variable-exfiltration-via-clone-from
access.redhat.com/security/cve/CVE-2026-67323
cve.org/CVERecord?id=CVE-2026-67323
github.com/gitpython-developers/GitPython/security/advisories/GHSA-956x-8gvw-wg5v
vulncheck.com/advisories/gitpython-before-command-injection-via-unguarded-git-options
access.redhat.com/security/cve/CVE-2026-67324
cve.org/CVERecord?id=CVE-2026-67324
access.redhat.com/security/cve/CVE-2026-67325
cve.org/CVERecord?id=CVE-2026-67325
github.com/gitpython-developers/GitPython/security/advisories/GHSA-2f96-g7mh-g2hx
vulncheck.com/advisories/gitpython-before-command-injection-via-option-prefix-abbreviation
access.redhat.com/security/cve/CVE-2026-69243
cve.org/CVERecord?id=CVE-2026-69243
nvd.nist.gov/vuln/detail/CVE-2026-69243
github.com/aio-libs/aiohttp/commit/6ae358f0983c3f4d6f67692b2f8e65dc8e091c98
github.com/aio-libs/aiohttp/pull/13017
github.com/aio-libs/aiohttp/releases/tag/v3.14.2
github.com/aio-libs/aiohttp/security/advisories/GHSA-mfx4-hv73-q22v
access.redhat.com/security/cve/CVE-2026-69244
cve.org/CVERecord?id=CVE-2026-69244
nvd.nist.gov/vuln/detail/CVE-2026-69244
github.com/aio-libs/aiohttp/commit/49f65d54150397892f7bcc4aae887767d51c322d
github.com/aio-libs/aiohttp/pull/13223
github.com/aio-libs/aiohttp/releases/tag/v3.14.3
github.com/aio-libs/aiohttp/security/advisories/GHSA-cq5v-8q36-5273
access.redhat.com/security/cve/CVE-2026-71364
cve.org/CVERecord?id=CVE-2026-71364
nvd.nist.gov/vuln/detail/CVE-2026-71364
access.redhat.com/security/cve/CVE-2026-71365
cve.org/CVERecord?id=CVE-2026-71365
nvd.nist.gov/vuln/detail/CVE-2026-71365
access.redhat.com/security/cve/CVE-2026-71366
cve.org/CVERecord?id=CVE-2026-71366
nvd.nist.gov/vuln/detail/CVE-2026-71366
access.redhat.com/security/cve/CVE-2026-73620
cve.org/CVERecord?id=CVE-2026-73620
nvd.nist.gov/vuln/detail/CVE-2026-73620
github.com/gitpython-developers/GitPython/security/advisories/GHSA-3f7w-8rr8-f37f
vulncheck.com/advisories/gitpython-before-arbitrary-file-overwrite-and-read
access.redhat.com/security/cve/CVE-2026-78677
bugzilla.redhat.com/show_bug.cgi?id=2523215
cve.org/CVERecord?id=CVE-2026-78677
nvd.nist.gov/vuln/detail/CVE-2026-78677
github.com/gitpython-developers/GitPython/security/advisories/GHSA-8mcc-hrx5-hvxc
vulncheck.com/advisories/gitpython-before-path-traversal-via-separate-git-dir
access.redhat.com/security/cve/CVE-2026-78679
bugzilla.redhat.com/show_bug.cgi?id=2523205
cve.org/CVERecord?id=CVE-2026-78679
nvd.nist.gov/vuln/detail/CVE-2026-78679
github.com/gitpython-developers/GitPython/security/advisories/GHSA-3wxw-xv34-2frg
vulncheck.com/advisories/gitpython-before-arbitrary-file-read-via-tagreference-create
access.redhat.com/errata/RHSA-2026:59136
docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.6/whats_new-async_updates
docs.redhat.com/en/documentation/red_hat_ansible_automation_platform/2.6
bugzilla.redhat.com/show_bug.cgi?id=2484377
bugzilla.redhat.com/show_bug.cgi?id=2488480
security.access.redhat.com/data/csaf/v2/advisories/2026/rhsa-2026_59136.json
access.redhat.com/security/cve/CVE-2026-12143
cve.org/CVERecord?id=CVE-2026-12143
nvd.nist.gov/vuln/detail/CVE-2026-12143
cwe.mitre.org/data/definitions/93.html
github.com/form-data/form-data/commit/64190db548c0179e37206858e39f27cf513e9435
github.com/form-data/form-data/commit/be3f3cf553978bac15a5182f1f3c3d2d38ccf229
github.com/form-data/form-data/commit/c7133499c2ee1b80c678e411244f4442bf902045
github.com/form-data/form-data/security/advisories/GHSA-hmw2-7cc7-3qxx
html.spec.whatwg.org/multipage/form-control-infrastructure.html
npmjs.com/package/form-data
access.redhat.com/security/cve/CVE-2026-44545
cve.org/CVERecord?id=CVE-2026-44545
nvd.nist.gov/vuln/detail/CVE-2026-44545
github.com/django/daphne/blob/main/CHANGELOG.txt
ubuntu.com/security/CVE-2026-67324
Left out here: the rest of 2 source descriptions. The JSON record has them.