CVE-2024-32884
gix-transport indirect code execution via malicious username
gitoxide is a pure Rust implementation of Git. gix-transport does not check the username part of a URL for text that the external ssh program would interpret as an option. A specially crafted clone URL can smuggle options to SSH. The possibilities are syntactically limited, but if a malicious clone URL is used by an application whose current working directory contains a malicious file, arbitrary code execution occurs. This is related to the patched vulnerability GHSA-rrjw-j4m2-mf34, but appears less severe due to a greater attack complexity. This issue has been patched in versions 0.35.0, 0.42.0 and 0.62.0.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- Low
- Availability
- Low
Exploit likelihood
What each source reports
CVE List Score used
6.4
gix-transport indirect code execution via malicious username
gitoxide is a pure Rust implementation of Git. gix-transport does not check the username part of a URL for text that the external ssh program would interpret as an option. A specially crafted clone URL can smuggle options to SSH. The possibilities are syntactically limited, but if a malicious clone URL is used by an application whose current working directory contains a malicious file, arbitrary code execution occurs. This is related to the patched vulnerability GHSA-rrjw-j4m2-mf34, but appears less severe due to a greater attack complexity. This issue has been patched in versions 0.35.0, 0.42.0 and 0.62.0.
- Record
CVE-2024-32884- CVSS 3.1
- 6.4 Medium
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:L/A:L - Weakness
- CWE-77, CWE-88
- Updated
- 2026-11-02
EUVDEUVD-2024-1168
6.4
gitoxide is a pure Rust implementation of Git. gix-transport does not check the username part of a URL for text that the external ssh program would interpret as an option. A specially crafted clone URL can smuggle options to SSH. The possibilities are syntactically limited, but if a malicious clone URL is used by an application whose current working directory contains a malicious file, arbitrary code execution occurs. This is related to the patched vulnerability GHSA-rrjw-j4m2-mf34, but appears less severe due to a greater attack complexity. This issue has been patched in versions 0.35.0, 0.42.0 and 0.62.0.
- Record
EUVD-2024-1168- CVSS 3.1
- 6.4 Medium
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:L/A:L - Updated
- 2026-11-03
GitHub AdvisoriesGHSA-98p4-xjmm-8mfh
6.4
gix-transport indirect code execution via malicious username
Summary
gix-transport does not check the username part of a URL for text that the external ssh program would interpret as an option. A specially crafted clone URL can smuggle options to SSH. The possibilities are syntactically limited, but if a malicious clone URL is used by an application whose current working directory contains a malicious file, arbitrary code execution occurs.
Details
This is related to the patched vulnerability https://github.com/advisories/GHSA-rrjw-j4m2-mf34, but appears less severe due to a greater attack complexity. Since https://github.com/Byron/gitoxide/pull/1032, gix-transport checks the host and path portions of a URL for text that has a - in a position that will cause ssh to interpret part of all of the URL as an option argument. But it does not check the non-mandatory username portion of the URL.
As in Git, when an address is a URL of the form ssh://username@hostname/path, or when it takes the special form username@hostname:dirs/repo, this is treated as an SSH URL. gix-transport will replace some characters in username with their %-based URL encodings, but otherwise passes username@hostname as an argument to the external ssh command. This happens even if username begins with a hyphen. In that case, ssh treats that argument as an option argument, and attempts to interpret and honor it as a sequence of one or more options possibly followed by an operand for the last option.
This is harder to exploit than GHSA-rrjw-j4m2-mf34, because the possibilities are constrained by:
-
The difficulty of forming an option argument
sshaccepts, given that characters such as=,/, and\, are URL-encoded,:is removed, and the argument passed tosshcontains the@sign and subsequent host identifier, which in an effective attack must be parseable as a suffix of the operand passed to the last option.The inability to include a literal
=prevents the use of-oNAME=VALUE(e.g.,-oProxyCommand=payload). The inability to include a literal/or\prevents smuggling in a path operand residing outside the current working directory, incuding on Windows. (Although a~character may be smuggled in,sshdoes not perform its own tilde expansion, so it does not form an absolute path.) -
The difficulty, or perhaps impossibility, of completing a connection (other than when arbitrary code execution has been achieved). This complicates or altogether prevents the use of options such as
-Aand-Xtogether with a connection to a real but malicious server. The reason a connection cannot generally be completed when exploiting this vulnerability is that, because the argumentgix-transportintends as a URL is treated as an option argument,sshtreats the subsequent non-option argumentgit-upload-packas the host instead of the command, but it is not a valid host name.Although
sshsupports aliases for hosts, even ifgit-upload-packcould be made an alias, that is made difficult by the URL-encoding transformation.
However, an attacker who is able to cause a specially named ssh configuration file to be placed in the current working directory can smuggle in an -F option referencing the file, and this allows arbitrary command execution.
This scenario is especially plausible because programs that operate on git repositories are often run in untrusted git repositories, sometimes even to operate on another repository. Situations where this is likely, such that an attacker could predict or arrange it, may for some applications include a malicious repository with a malicious submodule configuration.
Other avenues of exploitation exist, but appear to be less severe. For example, the -E option can be smuggled to create or append to a file in the current directory (or its target, if it is a symlink). There may also be other significant ways to exploit this that have not yet been discovered, or that would arise with new options in future versions of…
- Record
GHSA-98p4-xjmm-8mfh- CVSS 3.1
- 6.4 Medium
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:L/A:L - Weakness
- CWE-77, CWE-88
- Updated
- 2026-11-02
NVD
6.4
gitoxide is a pure Rust implementation of Git. gix-transport does not check the username part of a URL for text that the external ssh program would interpret as an option. A specially crafted clone URL can smuggle options to SSH. The possibilities are syntactically limited, but if a malicious clone URL is used by an application whose current working directory contains a malicious file, arbitrary code execution occurs. This is related to the patched vulnerability GHSA-rrjw-j4m2-mf34, but appears less severe due to a greater attack complexity. This issue has been patched in versions 0.35.0, 0.42.0 and 0.62.0.
- Record
CVE-2024-32884- CVSS 3.1
- 6.4 Medium
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:L/A:L - Weakness
- CWE-77, CWE-88
- Updated
- 2026-11-02
OSV
6.4
gix-transport indirect code execution via malicious username
gitoxide is a pure Rust implementation of Git. gix-transport does not check the username part of a URL for text that the external ssh program would interpret as an option. A specially crafted clone URL can smuggle options to SSH. The possibilities are syntactically limited, but if a malicious clone URL is used by an application whose current working directory contains a malicious file, arbitrary code execution occurs. This is related to the patched vulnerability GHSA-rrjw-j4m2-mf34, but appears less severe due to a greater attack complexity. This issue has been patched in versions 0.35.0, 0.42.0 and 0.62.0.
- Record
CVE-2024-32884- CVSS 3.1
- 6.4 Medium
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:L/A:L - Weakness
- CWE-77, CWE-88
- Updated
- 2026-11-02
OSVGHSA-98p4-xjmm-8mfh
6.4
gix-transport indirect code execution via malicious username
Summary
gix-transport does not check the username part of a URL for text that the external ssh program would interpret as an option. A specially crafted clone URL can smuggle options to SSH. The possibilities are syntactically limited, but if a malicious clone URL is used by an application whose current working directory contains a malicious file, arbitrary code execution occurs.
Details
This is related to the patched vulnerability https://github.com/advisories/GHSA-rrjw-j4m2-mf34, but appears less severe due to a greater attack complexity. Since https://github.com/Byron/gitoxide/pull/1032, gix-transport checks the host and path portions of a URL for text that has a - in a position that will cause ssh to interpret part of all of the URL as an option argument. But it does not check the non-mandatory username portion of the URL.
As in Git, when an address is a URL of the form ssh://username@hostname/path, or when it takes the special form username@hostname:dirs/repo, this is treated as an SSH URL. gix-transport will replace some characters in username with their %-based URL encodings, but otherwise passes username@hostname as an argument to the external ssh command. This happens even if username begins with a hyphen. In that case, ssh treats that argument as an option argument, and attempts to interpret and honor it as a sequence of one or more options possibly followed by an operand for the last option.
This is harder to exploit than GHSA-rrjw-j4m2-mf34, because the possibilities are constrained by:
-
The difficulty of forming an option argument
sshaccepts, given that characters such as=,/, and\, are URL-encoded,:is removed, and the argument passed tosshcontains the@sign and subsequent host identifier, which in an effective attack must be parseable as a suffix of the operand passed to the last option.The inability to include a literal
=prevents the use of-oNAME=VALUE(e.g.,-oProxyCommand=payload). The inability to include a literal/or\prevents smuggling in a path operand residing outside the current working directory, incuding on Windows. (Although a~character may be smuggled in,sshdoes not perform its own tilde expansion, so it does not form an absolute path.) -
The difficulty, or perhaps impossibility, of completing a connection (other than when arbitrary code execution has been achieved). This complicates or altogether prevents the use of options such as
-Aand-Xtogether with a connection to a real but malicious server. The reason a connection cannot generally be completed when exploiting this vulnerability is that, because the argumentgix-transportintends as a URL is treated as an option argument,sshtreats the subsequent non-option argumentgit-upload-packas the host instead of the command, but it is not a valid host name.Although
sshsupports aliases for hosts, even ifgit-upload-packcould be made an alias, that is made difficult by the URL-encoding transformation.
However, an attacker who is able to cause a specially named ssh configuration file to be placed in the current working directory can smuggle in an -F option referencing the file, and this allows arbitrary command execution.
This scenario is especially plausible because programs that operate on git repositories are often run in untrusted git repositories, sometimes even to operate on another repository. Situations where this is likely, such that an attacker could predict or arrange it, may for some applications include a malicious repository with a malicious submodule configuration.
Other avenues of exploitation exist, but appear to be less severe. For example, the -E option can be smuggled to create or append to a file in the current directory (or its target, if it is a symlink). There may also be other significant ways to exploit this that have not yet been discovered, or that would arise with new options in future versions of…
- Record
GHSA-98p4-xjmm-8mfh- CVSS 3.1
- 6.4 Medium
CVSS:3.1/AV:N/AC:H/PR:L/UI:N/S:U/C:H/I:L/A:L - Weakness
- CWE-77, CWE-88
- Updated
- 2026-11-02
OSVAZL-40229 No score
CVE-2024-32884 affecting package rust for versions less than 1.75.0-9
gitoxide is a pure Rust implementation of Git. gix-transport does not check the username part of a URL for text that the external ssh program would interpret as an option. A specially crafted clone URL can smuggle options to SSH. The possibilities are syntactically limited, but if a malicious clone URL is used by an application whose current working directory contains a malicious file, arbitrary code execution occurs. This is related to the patched vulnerability GHSA-rrjw-j4m2-mf34, but appears less severe due to a greater attack complexity. This issue has been patched in versions 0.35.0, 0.42.0 and 0.62.0.
- Record
AZL-40229- Updated
- 2026-11-02
OSVAZL-40264 No score
CVE-2024-32884 affecting package rust for versions less than 1.72.0-8
gitoxide is a pure Rust implementation of Git. gix-transport does not check the username part of a URL for text that the external ssh program would interpret as an option. A specially crafted clone URL can smuggle options to SSH. The possibilities are syntactically limited, but if a malicious clone URL is used by an application whose current working directory contains a malicious file, arbitrary code execution occurs. This is related to the patched vulnerability GHSA-rrjw-j4m2-mf34, but appears less severe due to a greater attack complexity. This issue has been patched in versions 0.35.0, 0.42.0 and 0.62.0.
- Record
AZL-40264- Updated
- 2026-11-02
OSVRUSTSEC-2024-0335 No score
gix-transport indirect code execution via malicious username
Summary
gix-transport does not check the username part of a URL for text that the external ssh program would interpret as an option. A specially crafted clone URL can smuggle options to SSH. The possibilities are syntactically limited, but if a malicious clone URL is used by an application whose current working directory contains a malicious file, arbitrary code execution occurs.
The first gix crate with the fix is version 0.62.0, and the first fixed gix CLI is version 0.35. gix-transport at version v0.42 is the lowest-level plumbing crate with the fix.
Details
This is related to the patched vulnerability RUSTSEC-2023-0064, but appears less severe due to a greater attack complexity. Since https://github.com/Byron/gitoxide/pull/1032, gix-transport checks the host and path portions of a URL for text that has a - in a position that will cause ssh to interpret part of all of the URL as an option argument. But it does not check the non-mandatory username portion of the URL.
As in Git, when an address is a URL of the form ssh://username@hostname/path, or when it takes the special form username@hostname:dirs/repo, this is treated as an SSH URL. gix-transport will replace some characters in username with their %-based URL encodings, but otherwise passes username@hostname as an argument to the external ssh command. This happens even if username begins with a hyphen. In that case, ssh treats that argument as an option argument, and attempts to interpret and honor it as a sequence of one or more options possibly followed by an operand for the last option.
This is harder to exploit than RUSTSEC-2023-0064, because the possibilities are constrained by:
-
The difficulty of forming an option argument
sshaccepts, given that characters such as=,/, and\, are URL-encoded,:is removed, and the argument passed tosshcontains the@sign and subsequent host identifier, which in an effective attack must be parseable as a suffix of the operand passed to the last option.The inability to include a literal
=prevents the use of-oNAME=VALUE(e.g.,-oProxyCommand=payload). The inability to include a literal/or\prevents smuggling in a path operand residing outside the current working directory, including on Windows. (Although a~character may be smuggled in,sshdoes not perform its own tilde expansion, so it does not form an absolute path.) -
The difficulty, or perhaps impossibility, of completing a connection (other than when arbitrary code execution has been achieved). This complicates or altogether prevents the use of options such as
-Aand-Xtogether with a connection to a real but malicious server. The reason a connection cannot generally be completed when exploiting this vulnerability is that, because the argumentgix-transportintends as a URL is treated as an option argument,sshtreats the subsequent non-option argumentgit-upload-packas the host instead of the command, but it is not a valid host name.Although
sshsupports aliases for hosts, even ifgit-upload-packcould be made an alias, that is made difficult by the URL-encoding transformation.
However, an attacker who is able to cause a specially named ssh configuration file to be placed in the current working directory can smuggle in an -F option referencing the file, and this allows arbitrary command execution.
This scenario is especially plausible because programs that operate on git repositories are often run in untrusted git repositories, sometimes even to operate on another repository. Situations where this is likely, such that an attacker could predict or arrange it, may for some applications include a malicious…
- Record
RUSTSEC-2024-0335- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
gix-transportcrates.io |
before 0.42.0 | 0.42.0 |
gixcrates.io |
before 0.62 | 0.62 |
gitoxidecrates.io |
before 0.35 | 0.35 |
rustAzure Linux:3 |
before 1.75.0-9 | 1.75.0-9 |
rustAzure Linux:2 |
before 1.72.0-8 | 1.72.0-8 |
gix-transportcrates.io |
0.0.0-0 up to 0.42.0 | 0.42.0 |
History
| Recorded | Changed | Sources |
|---|---|---|
| aliases, products | EUVD | |
| first indexed | CVE List, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2024-32884 is a medium vulnerability (CVSS 6.4) in Byron Gitoxide, published April 13, 2024. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.51%, the 43rd percentile. Fixed in gix-transport 0.42.0.
References
github.com/Byron/gitoxide/security/advisories/GHSA-98p4-xjmm-8mfh
rustsec.org/advisories/RUSTSEC-2024-0335.html
nvd.nist.gov/vuln/detail/CVE-2024-32884
github.com/advisories/GHSA-98p4-xjmm-8mfh
github.com/CVEProject/cvelistV5/tree/main/cves/2024/32xxx/CVE-2024-32884.json
github.com/Byron/gitoxide
crates.io/crates/gix-transport
github.com/Byron/gitoxide/pull/1032
Left out here: the rest of 3 source descriptions. The JSON record has them.