CVE-2026-45570: go-git: Improper single-quote escaping in go-git SSH transport
Impact
go-git's SSH transport constructs the remote exec command by wrapping the repository path in single quotes without escaping single quotes embedded inside the path. This diverges from canonical Git, which shell-quotes the path through sqquotebuf so that an embedded ' becomes the '\'' close-escape-reopen sequence and the whole path round-trips as a single quoted argument.
A repository path containing a single quote can therefore break out of the quoted region in the exec command and be appended as additional shell tokens. On SSH servers that evaluate the exec command through a shell (for example a user account whose login shell is /bin/sh or /bin/bash, or a ForceCommand wrapper that re-evaluates $SSHORIGINALCOMMAND), those additional tokens execute in that account's command-execution context. SSH servers that tokenize the exec command without shell evaluation, including the canonical git-shell setup, are not affected.
The vulnerable behaviour is on the SSH server side, not in go-git: the same bytes can be produced by any SSH client. The change in go-git is defense-in-depth that restores parity with canonical Git's wire format and prevents go-git from being a vehicle for reaching shell-evaluating servers through attacker-influenced repository paths.
Patches
Users should upgrade to a patched version in order to mitigate this issue. The fix ports sqquotebuf from canonical Git into go-git's SSH transport so that the wire output is byte-identical to what git itself would send for the same input.
Versions prior to v5 are likely to be affected, users are recommended to upgrade to a supported go-git version.
Credit
Thanks to @N0zoM1z0 for reporting this to the go-git project. :bow:
Other sources
go-git is an extensible git implementation library written in pure Go. Prior to 5.19.1 and 6.0.0-alpha.4, go-git's SSH transport constructs the remote exec command by wrapping the repository path in single quotes without escaping single quotes embedded inside the path. A repository path containing a single quote can therefore break out of the quoted region in the exec command and be appended as additional shell tokens. This vulnerability is fixed in 5.19.1 and 6.0.0-alpha.4.
— MITRE
go-git: Improper single-quote escaping in go-git SSH transport
— Microsoft
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
go/github.com/go-git/go-git/v6to a version that resolves this vulnerability.Fixed in 6.0.0-alpha.4 - Upgrade
Upgrade
go/github.com/go-git/go-git/v5to a version that resolves this vulnerability.Fixed in 5.19.1 - Upgrade
Upgrade to a fixed release to a version that resolves this vulnerability.
Fixed in 1.9.5-17 - Upgrade
Upgrade
go-gitto a version that resolves this vulnerability.Fixed in 5.19.1 - Upgrade
Upgrade
go-gitto a version that resolves this vulnerability.Fixed in 6.0.0-alpha.4 - Compensating control
On SSH servers that evaluate the exec command through a shell (e.g., user login shells like /bin/sh or /bin/bash, or a ForceCommand wrapper that re-evaluates $SSH_ORIGINAL_COMMAND), ensure repository paths cannot influence remote exec command tokenization; if possible, use SSH configurations that tokenize exec without shell evaluation (e.g., canonical git-shell setup).
Event History
Frequently Asked Questions
What is the severity of CVE-2026-45570?
CVE-2026-45570 is considered a medium severity vulnerability due to improper handling of single quotes in SSH commands.
How do I fix CVE-2026-45570?
To fix CVE-2026-45570, upgrade to go-git version 5.19.1, 6.0.0-alpha.4 or later.
What versions of go-git are affected by CVE-2026-45570?
CVE-2026-45570 affects go-git versions up to and including 4.7.0, 5.19.0, and 6.0.0-alpha.3.
What causes CVE-2026-45570?
CVE-2026-45570 is caused by go-git's SSH transport improperly wrapping repository paths in single quotes without escaping embedded single quotes.
What software is impacted by CVE-2026-45570?
The software impacted by CVE-2026-45570 is go-git and its associated versions.