Tern: GitPython Remote.pull() refspec bypasses the --upload-pack unsafe-option guard, enabling arbitrary command
Affects ternSource GCVE Database
Not known to be exploited · CVSS 9.2 Critical · fixed in 2.12.0 : patch tern as a priority.
Data as of 30 Oct 2026, 06:59 UTC
- EPSS
- 0.4% chance of exploitation in 30 days – higher than 40% of CVEsExploit Prediction Scoring System: the likelihood attackers will use this flaw soon.
- Patch
- Available – fixed in 2.12.0
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:NExploitation evidence
Disclosed: evidence found.
CVE published 14 Oct 2026
Detectable: no evidence on record.
No public nuclei template indexed
Weaponized: no evidence on record.
No public exploit code indexed in Metasploit or Exploit-DB
Exploited in the wildExploited: no evidence on record.
Not in CISA KEV and no source reports exploitation
Observed by OffSeq MirageSeen by Mirage: no evidence on record.
No attack traffic recorded by OffSeq Mirage sensors
A missing step is not evidence of safety. Sources: cve.org (opens in a new tab), the Metasploit, Exploit-DB and nuclei-templates index as of 29 Oct 2026.
What to do
Affected software
| Product | Affected | Fixed in |
|---|---|---|
Homebrewternpkg:brew/ternOther threats | Affected
| Fixed in– |
Check your own hosts for these packages with threat-finder (opens in a new tab), our free open-source scanner.
AI-suggested
A fix is available in GitPython versions after 2.12.0 (check vendor advisory for exact fixed versions). Users should upgrade to a patched version of GitPython that properly validates positional refspec arguments against unsafe options. Until patched, avoid passing untrusted input as the refspec argument to Remote.pull(), especially when using local-path or SSH transports. No other mitigations are documented.
Description
GitPython's Remote.pull() method improperly handles its positional refspec argument, allowing an attacker controlling this input to inject a --upload-pack option that bypasses unsafe option guards. This leads to arbitrary command execution with the privileges of the calling process when pulling from local-path or SSH transports. The vulnerability arises because the unsafe option check only inspects keyword arguments, not the positional refspec, and git pull forwards the refspec to an internal fetch without a separator, enabling the injected option to be executed.
References
- github.com/gitpython-developers/GitPython/security/advisories/GHSA-f9j4-qggq-h239 (opens in a new tab)
- github.com/gitpython-developers/GitPython/pull/2247 (opens in a new tab)
- github.com/gitpython-developers/GitPython/commit/790bb3164948625ffb043d2a162425d55923fe9a (opens in a new tab)
- github.com/gitpython-developers/GitPython (opens in a new tab)
- github.com/gitpython-developers/GitPython/releases/tag/3.2.0 (opens in a new tab)