Git security vulnerabilities announced
Git users are encouraged to upgrade to the latest version, especially if they use `git archive`, work in untrusted repositories, or use Git GUI on Windows.
![](https://github.blog/wp-content/uploads/2022/10/Group-3.png?resize=1600%2C850)
Today, the Git project released new versions to address a pair of security vulnerabilities, CVE-2022-41903, and CVE-2022-23521, that affect versions 2.39 and older.
Git for Windows was also patched to address an additional, Windows-specific issue known as CVE-2022-41953.
The first two vulnerabilities affect Git’s commit formatting mechanism and .gitattributes
parser, respectively. The former can be used to perform arbitrary heap writes, while the latter can be used for arbitrary reads, too. Both may result in arbitrary code execution, so users should upgrade immediately. Both were also found as part of an audit of the Git codebase conducted by X41. This audit was sponsored by the Open Source Technology Improvement Fund (OSTIF). Fixes were authored by engineers from the GitLab Security Research Team, as well as GitHub Engineers, and members of the git-security mailing list.
A complete copy of the report (along with a variety of issues that weren’t deemed to have security implications) is available here.
The Windows-specific issue involves a $PATH
lookup including the current working directory, which can be leveraged to run arbitrary code when cloning repositories with Git GUI.
CVE-2022-41903
The first set of updates concern Git’s commit-formatting mechanism, used to display arbitrary information about commits, as in git log --format
. When processing one of the padding operators (for example, %<(
, %>(
, etc.) an integer overflow can occur when a large offset is given).
This vulnerability can be triggered directly via git log --format
. It may also be triggered indirectly via Git’s export-subst
mechanism, which applies the formatting modifiers to selected files when using git archive
.
This integer overflow can result in arbitrary heap reads and writes, which may result in remote code execution.
[source]
CVE-2022-23521
gitattributes
are used to define unique attributes corresponding to paths in your repository. These attributes are defined by .gitattributes
file(s) within your repository.
The parser used to read these files has multiple integer overflows, which can occur when parsing either a large number of patterns, a large number of attributes, or attributes with overly-long names.
These overflows may be triggered via a malicious .gitattributes file. However, Git automatically splits lines at 2KB when reading .gitattributes
from a file, but not when parsing it from the index. Successfully exploiting this vulnerability depends on the location of the .gitattributes
file in question.
Like the above, this integer overflow can result in arbitrary heap reads and writes, which may result in remote code execution.
[source]
CVE-2022-41953
After cloning a repository, Git GUI automatically applies some post-processing to the resulting checkout, including running a spell-checker, if one is available.
A Windows-specific vulnerability causes Git GUI to look for the spell-check in the worktree that was just checked out, which may result in running untrusted code.
[source]
Upgrade to the latest Git version
The most effective way to protect against these vulnerabilities is to upgrade to Git 2.39.1. If you can’t update immediately, reduce your risk by taking the following steps:
- Avoid invoking the
--format
mechanism directly with the known operators, and avoid runninggit archive
in untrusted repositories. - If you expose
git archive
viagit daemon
, consider disabling it if working with untrusted repositories by runninggit config --global daemon.uploadArch false
. - Avoid using Git GUI on Windows when cloning untrusted repositories.
In order to protect users against these attacks, GitHub has taken proactive steps. Specifically, we:
- Scanned all repositories on GitHub.com to confirm that no evidence exists to conclude that GitHub was used as a vector to exploit any of these vulnerabilities.
- Implemented mitigation steps to prevent GitHub.com from being used as an attack vector in CVE-2022-41903, and CVE-2022-23521.
- Scheduled a GitHub Desktop release for later today, January 17, that prevents the exploitation of this vulnerability.
- Scheduled updates to GitHub Codespaces and GitHub Actions to upgrade their versions of Git.
- Scheduled updates to GitHub Enterprise Server1 with patched versions of Git.
Credit for CVE-2022-41903 goes to Joern Schneeweisz of GitLab. Credit for CVE-2022-23521 goes to Markus Vervier, and Eric Sesterhenn of X41 D-Sec, whose work was sponsored by OSTIF. Fixes were written by Patrick Steinhardt of GitLab, with additional help from members of the Git security mailing list.
Credit for finding CVE-2022-41953 goes to 俞晨东.
Notes
- The updates will be present in GitHub Enterprise Server versions 3.3.19, 3.4.14, 3.5.11, 3.6.7, and 3.7.4. ↩
Tags:
Written by
Related posts
![](https://github.blog/wp-content/uploads/2024/05/Collaboration-LightMode-3.png?resize=400%2C212)
How to build an open source metrics dashboard
How GitHub volunteers built an open source metrics dashboard for the World Health Organization and some best practices they picked up along the way.
![](https://github.blog/wp-content/uploads/2024/05/Collaboration-LightMode-2-1.png?resize=400%2C212)
Automating open source: How Ersilia distributes AI models to advance global health equity
Discover how the Ersilia Open Source Initiative accelerates drug discovery by using GitHub Actions to disseminate AI/ML models.
![Orange rectangle with the Git logo and white text overlaid, which reads "Git 2.46 is here!"](https://github.blog/wp-content/uploads/2024/07/git-246.png?resize=400%2C212)
Highlights from Git 2.46
Git 2.46 is here with new features like pseudo-merge bitmaps, more capable credential helpers, and a new git config command. Check out our coverage on some of the highlights here.