Skip to content

Commit

Permalink
Merge v2.39.1.windows.1 (#4219)
Browse files Browse the repository at this point in the history
This PR takes the embargoed release tag `v2.39.1.windows.1` and merges
it into the `main` branch.

It likely that I messed something up in the order of releasing the
security release and merging the [security
advisory](GHSA-v4px-mx59-w99c).
  • Loading branch information
derrickstolee authored Jan 17, 2023
2 parents dfaa214 + b03dafd commit 7360767
Show file tree
Hide file tree
Showing 25 changed files with 586 additions and 127 deletions.
86 changes: 86 additions & 0 deletions Documentation/RelNotes/2.30.7.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
Git v2.30.7 Release Notes
=========================

This release addresses the security issues CVE-2022-41903 and
CVE-2022-23521.


Fixes since v2.30.6
-------------------

* CVE-2022-41903:

git log has the ability to display commits using an arbitrary
format with its --format specifiers. This functionality is also
exposed to git archive via the export-subst gitattribute.

When processing the padding operators (e.g., %<(, %<|(, %>(,
%>>(, or %><( ), an integer overflow can occur in
pretty.c::format_and_pad_commit() where a size_t is improperly
stored as an int, and then added as an offset to a subsequent
memcpy() call.

This overflow can be triggered directly by a user running a
command which invokes the commit formatting machinery (e.g., git
log --format=...). It may also be triggered indirectly through
git archive via the export-subst mechanism, which expands format
specifiers inside of files within the repository during a git
archive.

This integer overflow can result in arbitrary heap writes, which
may result in remote code execution.

* CVE-2022-23521:

gitattributes are a mechanism to allow defining attributes for
paths. These attributes can be defined by adding a `.gitattributes`
file to the repository, which contains a set of file patterns and
the attributes that should be set for paths matching this pattern.

When parsing gitattributes, multiple integer overflows can occur
when there is a huge number of path patterns, a huge number of
attributes for a single pattern, or when the declared attribute
names are huge.

These overflows can be triggered via a crafted `.gitattributes` file
that may be part of the commit history. Git silently splits lines
longer than 2KB when parsing gitattributes from a file, but not when
parsing them from the index. Consequentially, the failure mode
depends on whether the file exists in the working tree, the index or
both.

This integer overflow can result in arbitrary heap reads and writes,
which may result in remote code execution.

Credit for finding CVE-2022-41903 goes to Joern Schneeweisz of GitLab.
An initial fix was authored by Markus Vervier of X41 D-Sec. Credit for
finding CVE-2022-23521 goes to Markus Vervier and Eric Sesterhenn of X41
D-Sec. This work was sponsored by OSTIF.

The proposed fixes have been polished and extended to cover additional
findings by Patrick Steinhardt of GitLab, with help from others on the
Git security mailing list.

Patrick Steinhardt (21):
attr: fix overflow when upserting attribute with overly long name
attr: fix out-of-bounds read with huge attribute names
attr: fix integer overflow when parsing huge attribute names
attr: fix out-of-bounds write when parsing huge number of attributes
attr: fix out-of-bounds read with unreasonable amount of patterns
attr: fix integer overflow with more than INT_MAX macros
attr: harden allocation against integer overflows
attr: fix silently splitting up lines longer than 2048 bytes
attr: ignore attribute lines exceeding 2048 bytes
attr: ignore overly large gitattributes files
pretty: fix out-of-bounds write caused by integer overflow
pretty: fix out-of-bounds read when left-flushing with stealing
pretty: fix out-of-bounds read when parsing invalid padding format
pretty: fix adding linefeed when placeholder is not expanded
pretty: fix integer overflow in wrapping format
utf8: fix truncated string lengths in `utf8_strnwidth()`
utf8: fix returning negative string width
utf8: fix overflow when returning string width
utf8: fix checking for glyph width in `strbuf_utf8_replace()`
utf8: refactor `strbuf_utf8_replace` to not rely on preallocated buffer
pretty: restrict input lengths for padding and wrapping formats

5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.31.6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Git v2.31.6 Release Notes
=========================

This release merges the security fix that appears in v2.30.7; see
the release notes for that version for details.
8 changes: 8 additions & 0 deletions Documentation/RelNotes/2.32.5.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
Git v2.32.5 Release Notes
=========================

This release merges the security fix that appears in v2.30.7; see
the release notes for that version for details.

In addition, included are additional code for "git fsck" to check
for questionable .gitattributes files.
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.33.6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Git v2.33.6 Release Notes
=========================

This release merges the security fix that appears in v2.30.7; see
the release notes for that version for details.
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.34.6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Git v2.34.6 Release Notes
=========================

This release merges the security fix that appears in v2.30.7; see
the release notes for that version for details.
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.35.6.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Git v2.35.6 Release Notes
=========================

This release merges the security fix that appears in v2.30.7; see
the release notes for that version for details.
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.36.4.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Git v2.36.4 Release Notes
=========================

This release merges the security fix that appears in v2.30.7; see
the release notes for that version for details.
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.37.5.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Git v2.37.5 Release Notes
=========================

This release merges the security fix that appears in v2.30.7; see
the release notes for that version for details.
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.38.3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Git v2.38.3 Release Notes
=========================

This release merges the security fix that appears in v2.30.7; see
the release notes for that version for details.
5 changes: 5 additions & 0 deletions Documentation/RelNotes/2.39.1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Git v2.39.1 Release Notes
=========================

This release merges the security fix that appears in v2.30.7; see
the release notes for that version for details.
12 changes: 12 additions & 0 deletions Documentation/fsck-msgids.txt
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,18 @@
`fullPathname`::
(WARN) A path contains the full path starting with "/".

`gitattributesBlob`::
(ERROR) A non-blob found at `.gitattributes`.

`gitattributesLarge`::
(ERROR) The `.gitattributes` blob is too large.

`gitattributesLineLength`::
(ERROR) The `.gitattributes` blob contains too long lines.

`gitattributesMissing`::
(ERROR) Unable to read `.gitattributes` blob.

`gitattributesSymlink`::
(INFO) `.gitattributes` is a symlink.

Expand Down
2 changes: 1 addition & 1 deletion GIT-VERSION-GEN
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#!/bin/sh

GVF=GIT-VERSION-FILE
DEF_VER=v2.39.0
DEF_VER=v2.39.1

LF='
'
Expand Down
2 changes: 1 addition & 1 deletion RelNotes
Loading

0 comments on commit 7360767

Please sign in to comment.