Browse Source
* maint-2.15: Git 2.15.2 Git 2.14.4 Git 2.13.7 verify_path: disallow symlinks in .gitmodules update-index: stat updated files earlier verify_dotfile: mention case-insensitivity in comment verify_path: drop clever fallthrough skip_prefix: add case-insensitive variant is_{hfs,ntfs}_dotgitmodules: add tests is_ntfs_dotgit: match other .git files is_hfs_dotgit: match other .git files is_ntfs_dotgit: use a size_t for traversing string submodule-config: verify submodule names as pathsmaint

18 changed files with 500 additions and 41 deletions
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
Git v2.13.7 Release Notes |
||||
========================= |
||||
|
||||
Fixes since v2.13.6 |
||||
------------------- |
||||
|
||||
* Submodule "names" come from the untrusted .gitmodules file, but we |
||||
blindly append them to $GIT_DIR/modules to create our on-disk repo |
||||
paths. This means you can do bad things by putting "../" into the |
||||
name. We now enforce some rules for submodule names which will cause |
||||
Git to ignore these malicious names (CVE-2018-11235). |
||||
|
||||
Credit for finding this vulnerability and the proof of concept from |
||||
which the test script was adapted goes to Etienne Stalmans. |
||||
|
||||
* It was possible to trick the code that sanity-checks paths on NTFS |
||||
into reading random piece of memory (CVE-2018-11233). |
||||
|
||||
Credit for fixing for these bugs goes to Jeff King, Johannes |
||||
Schindelin and others. |
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
Git v2.14.4 Release Notes |
||||
========================= |
||||
|
||||
This release is to forward-port the fixes made in the v2.13.7 version |
||||
of Git. See its release notes for details. |
@ -0,0 +1,76 @@
@@ -0,0 +1,76 @@
|
||||
#!/bin/sh |
||||
|
||||
test_description='check handling of .. in submodule names |
||||
|
||||
Exercise the name-checking function on a variety of names, and then give a |
||||
real-world setup that confirms we catch this in practice. |
||||
' |
||||
. ./test-lib.sh |
||||
|
||||
test_expect_success 'check names' ' |
||||
cat >expect <<-\EOF && |
||||
valid |
||||
valid/with/paths |
||||
EOF |
||||
|
||||
git submodule--helper check-name >actual <<-\EOF && |
||||
valid |
||||
valid/with/paths |
||||
|
||||
../foo |
||||
/../foo |
||||
..\foo |
||||
\..\foo |
||||
foo/.. |
||||
foo/../ |
||||
foo\.. |
||||
foo\..\ |
||||
foo/../bar |
||||
EOF |
||||
|
||||
test_cmp expect actual |
||||
' |
||||
|
||||
test_expect_success 'create innocent subrepo' ' |
||||
git init innocent && |
||||
git -C innocent commit --allow-empty -m foo |
||||
' |
||||
|
||||
test_expect_success 'submodule add refuses invalid names' ' |
||||
test_must_fail \ |
||||
git submodule add --name ../../modules/evil "$PWD/innocent" evil |
||||
' |
||||
|
||||
test_expect_success 'add evil submodule' ' |
||||
git submodule add "$PWD/innocent" evil && |
||||
|
||||
mkdir modules && |
||||
cp -r .git/modules/evil modules && |
||||
write_script modules/evil/hooks/post-checkout <<-\EOF && |
||||
echo >&2 "RUNNING POST CHECKOUT" |
||||
EOF |
||||
|
||||
git config -f .gitmodules submodule.evil.update checkout && |
||||
git config -f .gitmodules --rename-section \ |
||||
submodule.evil submodule.../../modules/evil && |
||||
git add modules && |
||||
git commit -am evil |
||||
' |
||||
|
||||
# This step seems like it shouldn't be necessary, since the payload is |
||||
# contained entirely in the evil submodule. But due to the vagaries of the |
||||
# submodule code, checking out the evil module will fail unless ".git/modules" |
||||
# exists. Adding another submodule (with a name that sorts before "evil") is an |
||||
# easy way to make sure this is the case in the victim clone. |
||||
test_expect_success 'add other submodule' ' |
||||
git submodule add "$PWD/innocent" another-module && |
||||
git add another-module && |
||||
git commit -am another |
||||
' |
||||
|
||||
test_expect_success 'clone evil superproject' ' |
||||
git clone --recurse-submodules . victim >output 2>&1 && |
||||
! grep "RUNNING POST CHECKOUT" output |
||||
' |
||||
|
||||
test_done |
Loading…
Reference in new issue