This crate has no reviews yet. To add a review, set up your cargo-crev
.
Lib.rs has been able to verify that all files in the crate's tarball are in the crate's repository with a git tag matching the version. Please note that this check is still in beta, and absence of this confirmation does not mean that the files don't match.
Crates in the crates.io registry are tarball snapshots uploaded by crates' publishers. The registry is not using crates' git repositories, so there is a possibility that published crates have a misleading repository URL, or contain different code from the code in the repository.
To review the actual code of the crate, it's best to use cargo crev open gitoxide-core
. Alternatively, you can download the tarball of gitoxide-core v0.43.0 or view the source online.
Summary
The
gix
andein
commands write pathnames and other metadata literally to terminals, even if they contain characters terminals treat specially, including ANSI escape sequences. This sometimes allows an untrusted repository to misrepresent its contents and to alter or concoct error messages.Details
gitoxide-core
, which provides most underlying functionality of thegix
andein
commands, does not neutralize newlines, backspaces, or control characters—including those that form ANSI escape sequences—that appear in a repository's paths, author and committer names, commit messages, or other metadata. Such text may be written as part of the output of a command, as well as appearing in error messages when an operation fails.ANSI escape sequences are of particular concern because, when printed to a terminal, they can change colors, including to render subsequent text unreadable; reposition the cursor to write text in a different location, including where text has already been written; clear the terminal; set the terminal title-bar text to arbitrary values; render the terminal temporarily unusable; and other such operations.
The effect is mostly an annoyance. But the author of a malicious repository who can predict how information from the repository may be accessed can cause files in the repository to be concealed or otherwise misrepresented, as well as rewrite all or part of error messages, or mimic error messages convincingly by repositioning the cursor and writing colored text.
PoC
On a Unix-like system in a POSIX-compatible shell, run:
In the repository—or, if desired, in a clone of it, to show that this is exploitable by getting a user to clone an untrusted repository—run this command, which outputs entries in a three-column form showing type, hash, and filename:
Although the output is of that form, it does not appear to be. Instead, the output in a terminal looks like this, colorized to appear to be an error message, with
EVIL_COMMAND
in another color, and with no other text:In some terminals, a beep or other sound will be made. In most terminals, the title bar text will be changed to
Boo!
, though in some shells this may be immediately undone when printing the prompt. These elements are included to showcase the abilities of ANSI escape sequences, but they are not usually themselves threats.To see what is actually produced,
gix tree entries
can be piped to a command that displays special characters symbolically, such asless
orcat -v
if available.That shows the effect on
gix tree entries
, but various other commands are also affected, and the escape sequences and other special characters can also appear in non-path metadata, such as in theuser.name
used to create a commit.Impact
For users who do not clone or operate in clones of untrusted repositories, there is no impact.
Windows is much less affected than Unix-like systems due to limitations on what characters can appear in filenames, and because traditionally Windows terminals do not support as many ANSI escape sequences.
Because different
gix
andein
commands display different data in different formats, the author of a malicious repository must guess how it will be used, which complicates crafting truly convincing output, though it may be possible to craft a repository wheregix clone
fails to clone it but produces a misleading message.Although this is mainly exploitable on systems other than Windows, in the ability to produce misleading output this superficially resembles CVE-2024-35197. But this is much more limited, because:
gix
andein
executables are unaffected. The exception is if another application usesgitoxide-core
. But this is explicitly discouraged in thegitoxide-core
documentation and is believed to be rare.https://github.com/advisories/GHSA-88g2-r9rw-g55h
https://nvd.nist.gov/vuln/detail/CVE-2024-43785
https://github.com/Byron/gitoxide/issues/1534
CVE-2024-43785
GHSA-88g2-r9rw-g55h