Open-Source Security Intelligence

Know every vulnerability
before it knows you.

DevGuard continuously monitors your dependencies and alerts you when CVEs like this one affect your stack — with real-time threat intelligence built for developers.

Search

RUSTSEC-2023-0002

Published Jan 12, 2023·Last modified Feb 9, 2023
Affected Components(0)

No affected components available

Description

By default, when accessing an ssh repository (ie via an ssh: git repository url) the git2 Rust package does not do any host key checking.

Additionally, the provided API is not sufficient for a an application to do meaningful checking itself.

Impact

When connecting to an ssh repository, and when an attacker can redirect the connection (performing a malice-in-the-middle attack) an affected application might:

  • Receive git objects and branches controlled by the attacker, exposing the local system (and whatever happens next) to malicious data. In many circumstances, this could readily lead to privilege escalation.

  • Erroneously send git objects to the attacker, rather than to the intended recipient. If the information is not supposed to be public, this would constitute an information leak. Also, since the data doesn't arrive where intended, it constitutes a denial of service.

Technical details

The git2 Rust package (henceforth, git2-rs) unconditionally calls the underlying C libgit2 functions to set an ssh certificate check callback. The Rust package uses this to offer the ability for the application to set a callback to a Rust function.

The C-level callback function provided by git2-rs 0.15.0 and earlier:

  • Always ignores the is_valid argument provided by libgit2, which indicates whether libgit2 considers the host key valid

  • By default, performs no checks, and then returns code 0, indicating to libgit2 to override libgit2's determination and treat the host key as valid.

  • Provides only limited APIs to the application for examining the supplied host key, and doesn't tell the application whether libgit2's checks succeeded, so it is difficult for the application cannot work around the problem.

Resolution

Upgrade to git2-rs 0.16.x.

The default behaviour in 0.16.x is to honour libgit2's validity determination.

Note that adding this previously skipped check may cause existing setups to stop working.

Relationship to CVE-2022-46176

This bug manifested in cargo where it was assigned CVE-2022-46176.

The same bug exists in other applications which use affected versions of git2-rs unless they never try to access git repositories with ssh: urls.

Risk Scores
Base Score
0.0

Measures severity based on intrinsic characteristics of the vulnerability, independent of environment.

Threat Intelligence
0.0

No exploitation activity has been observed at this time. Continue routine monitoring.

EPSS
N/A

Probability that this vulnerability will be exploited in the wild within the next 30 days.

Exploit
Not available

We did not find any exploit available. Neither in GitHub repositories nor in the Exploit-Database.

Scan your project

Continuously monitor your dependencies and get alerted when vulnerabilities like this one affect your stack.

Checkout DevGuard