# CVE-2026-110858: GitPython remote code execution in Remote.pull() refspec argument

Source: https://junglewise.ai/threats/cve-2026-110858-gitpython-from-3-1-30-before-3-2-0-contains-a-remote-code  
Publisher: Junglewise Threat Intelligence, https://junglewise.ai/threats  
Published: 2026-10-14. Updated: 2026-10-16  
License: CC BY 4.0 with a link back

CVE-2026-110858 · Severity: high · CVSS 8.1 · Published 2026-10-14

GitPython is a Python library for interacting with Git repositories. A flaw in the Remote.pull() method allows attackers who control the refspec argument to execute arbitrary operating system commands with the privileges of the calling process. This can occur when applications receive user-supplied branch or repository parameters from web forms or CI/CD services without proper validation.

Technologies: [GitPython](https://junglewise.ai/threats/technologies/gitpython-gitpython), [gitpython (PyPI)](https://junglewise.ai/threats/technologies/pypi-gitpython). Vendors: [GitPython](https://junglewise.ai/threats/vendors/gitpython), [PyPI](https://junglewise.ai/threats/vendors/pypi).

## Quick answers

**Is CVE-2026-110858 exploited in the wild?** No. Junglewise Threat Intelligence has no report of CVE-2026-110858 being exploited in the wild.

**How severe is CVE-2026-110858?** High severity, with a CVSS score of 8.1, published 14 October 2026.

**Which products and versions are affected?** GitPython 3.1.30 before 3.2.0; gitpython (PyPI) ECOSYSTEM:introduced=3.1.30,fixed=3.2.0.

**Is there a fix for CVE-2026-110858?** Yes. gitpython (PyPI): upgrade to 3.2.0 or later. Until then: Restrict the use of Remote.pull() to trusted refspec values. If accepting user-supplied refspec arguments, validate them against a whitelist of allowed branch names or refspec patterns before passing to Remote.pull(). Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.

**How is CVE-2026-110858 attacked?** It is attacked over the network.

**Am I affected by CVE-2026-110858?** Check whether you run GitPython or gitpython (PyPI) at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.

## How to fix

- gitpython (PyPI): upgrade to 3.2.0 or later

  ```sh
  pip install "gitpython>=3.2.0"
  ```


Restrict the use of Remote.pull() to trusted refspec values. If accepting user-supplied refspec arguments, validate them against a whitelist of allowed branch names or refspec patterns before passing to Remote.pull().

## Technical details

Remote.pull() forwards its positional refspec argument directly to the git pull subprocess without properly validating it, while its unsafe-option guard only inspects keyword arguments. An attacker can inject --upload-pack=&lt;command&gt; as the refspec value; the check_unsafe_options() function never validates this positional argument because it is passed as an empty list to _option_candidates(). When git pull re-forwards the positional to an internal git fetch without a trailing -- separator, the injected --upload-pack option is honored, executing arbitrary commands on local filesystem or SSH transports.

## Affected products

- GitPython GitPython 3.1.30 before 3.2.0

## Identifiers

- CVE-2026-110858
- GHSA-f9j4-qggq-h239

## Timeline

- 2026-09-30: advisory
- 2026-10-14: disclosed

## References

- [https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-f9j4-qggq-h239](https://github.com/gitpython-developers/GitPython/security/advisories/GHSA-f9j4-qggq-h239)
- [https://www.vulncheck.com/advisories/gitpython-3.1.30-before-3.2.0-command-injection-via-remote-pull-refspec](https://www.vulncheck.com/advisories/gitpython-3.1.30-before-3.2.0-command-injection-via-remote-pull-refspec)

## Related threats

- [GitPython command wrappers omit unsafe protocol and option checks](https://junglewise.ai/threats/cve-2026-110857-gitpython-command-wrappers-omit-unsafe-protocol-and-option)
- [GitPython submodule path traversal to arbitrary hook execution](https://junglewise.ai/threats/cve-2026-114145-gitpython-is-a-python-library-used-to-interact-with-git)
- [GitPython symlink following in Submodule.move()](https://junglewise.ai/threats/cve-2026-110860-gitpython-from-3-1-62-before-3-2-0-contains-a-symlink-following)
- [GitPython argument injection in Head.checkout()](https://junglewise.ai/threats/cve-2026-110859-gitpython-before-3-2-0-contains-an-argument-injection)
- [GitPython regular expression denial of service in parse_actor_and_date](https://junglewise.ai/threats/cve-2026-110856-gitpython-before-3-2-0-contains-a-regular-expression-denial-of)
