Skip to content

Commit

Permalink
Sync with 2.18.1
Browse files Browse the repository at this point in the history
* maint-2.18:
  Git 2.18.1
  Git 2.17.2
  fsck: detect submodule paths starting with dash
  fsck: detect submodule urls starting with dash
  Git 2.16.5
  Git 2.15.3
  Git 2.14.5
  submodule-config: ban submodule paths that start with a dash
  submodule-config: ban submodule urls that start with dash
  submodule--helper: use "--" to signal end of clone options
  • Loading branch information
gitster committed Sep 27, 2018
2 parents 1d4361b + 268fbcd commit 1958ad5
Show file tree
Hide file tree
Showing 10 changed files with 148 additions and 0 deletions.
16 changes: 16 additions & 0 deletions Documentation/RelNotes/2.14.5.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
Git v2.14.5 Release Notes
=========================

This release is to address the recently reported CVE-2018-17456.

Fixes since v2.14.4
-------------------

* Submodules' "URL"s come from the untrusted .gitmodules file, but
we blindly gave it to "git clone" to clone submodules when "git
clone --recurse-submodules" was used to clone a project that has
such a submodule. The code has been hardened to reject such
malformed URLs (e.g. one that begins with a dash).

Credit for finding and fixing this vulnerability goes to joernchen
and Jeff King, respectively.
6 changes: 6 additions & 0 deletions Documentation/RelNotes/2.15.3.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Git v2.15.3 Release Notes
=========================

This release merges up the fixes that appear in v2.14.5 to address
the recently reported CVE-2018-17456; see the release notes for that
version for details.
6 changes: 6 additions & 0 deletions Documentation/RelNotes/2.16.5.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Git v2.16.5 Release Notes
=========================

This release merges up the fixes that appear in v2.14.5 to address
the recently reported CVE-2018-17456; see the release notes for that
version for details.
12 changes: 12 additions & 0 deletions Documentation/RelNotes/2.17.2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
Git v2.17.2 Release Notes
=========================

This release merges up the fixes that appear in v2.14.5 to address
the recently reported CVE-2018-17456; see the release notes for that
version for details.

In addition, this release also teaches "fsck" and the server side
logic to reject pushes to repositories that attempt to create such a
problematic ".gitmodules" file as tracked contents, to help hosting
sites protect their customers by preventing malicious contents from
spreading.
6 changes: 6 additions & 0 deletions Documentation/RelNotes/2.18.1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Git v2.18.1 Release Notes
=========================

This release merges up the fixes that appear in v2.14.5 and in
v2.17.2 to address the recently reported CVE-2018-17456; see the
release notes for those versions for details.
1 change: 1 addition & 0 deletions builtin/submodule--helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -1233,6 +1233,7 @@ static int clone_submodule(const char *path, const char *gitdir, const char *url
if (gitdir && *gitdir)
argv_array_pushl(&cp.args, "--separate-git-dir", gitdir, NULL);

argv_array_push(&cp.args, "--");
argv_array_push(&cp.args, url);
argv_array_push(&cp.args, path);

Expand Down
14 changes: 14 additions & 0 deletions fsck.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ static struct oidset gitmodules_done = OIDSET_INIT;
FUNC(GITMODULES_LARGE, ERROR) \
FUNC(GITMODULES_NAME, ERROR) \
FUNC(GITMODULES_SYMLINK, ERROR) \
FUNC(GITMODULES_URL, ERROR) \
FUNC(GITMODULES_PATH, ERROR) \
/* warnings */ \
FUNC(BAD_FILEMODE, WARN) \
FUNC(EMPTY_NAME, WARN) \
Expand Down Expand Up @@ -992,6 +994,18 @@ static int fsck_gitmodules_fn(const char *var, const char *value, void *vdata)
FSCK_MSG_GITMODULES_NAME,
"disallowed submodule name: %s",
name);
if (!strcmp(key, "url") && value &&
looks_like_command_line_option(value))
data->ret |= report(data->options, data->obj,
FSCK_MSG_GITMODULES_URL,
"disallowed submodule url: %s",
value);
if (!strcmp(key, "path") && value &&
looks_like_command_line_option(value))
data->ret |= report(data->options, data->obj,
FSCK_MSG_GITMODULES_PATH,
"disallowed submodule path: %s",
value);
free(name);

return 0;
Expand Down
10 changes: 10 additions & 0 deletions submodule-config.c
Original file line number Diff line number Diff line change
Expand Up @@ -384,6 +384,12 @@ static void warn_multiple_config(const struct object_id *treeish_name,
commit_string, name, option);
}

static void warn_command_line_option(const char *var, const char *value)
{
warning(_("ignoring '%s' which may be interpreted as"
" a command-line option: %s"), var, value);
}

struct parse_config_parameter {
struct submodule_cache *cache;
const struct object_id *treeish_name;
Expand All @@ -409,6 +415,8 @@ static int parse_config(const char *var, const char *value, void *data)
if (!strcmp(item.buf, "path")) {
if (!value)
ret = config_error_nonbool(var);
else if (looks_like_command_line_option(value))
warn_command_line_option(var, value);
else if (!me->overwrite && submodule->path)
warn_multiple_config(me->treeish_name, submodule->name,
"path");
Expand Down Expand Up @@ -449,6 +457,8 @@ static int parse_config(const char *var, const char *value, void *data)
} else if (!strcmp(item.buf, "url")) {
if (!value) {
ret = config_error_nonbool(var);
} else if (looks_like_command_line_option(value)) {
warn_command_line_option(var, value);
} else if (!me->overwrite && submodule->url) {
warn_multiple_config(me->treeish_name, submodule->name,
"url");
Expand Down
49 changes: 49 additions & 0 deletions t/t7416-submodule-dash-url.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
#!/bin/sh

test_description='check handling of .gitmodule url with dash'
. ./test-lib.sh

test_expect_success 'create submodule with protected dash in url' '
git init upstream &&
git -C upstream commit --allow-empty -m base &&
mv upstream ./-upstream &&
git submodule add ./-upstream sub &&
git add sub .gitmodules &&
git commit -m submodule
'

test_expect_success 'clone can recurse submodule' '
test_when_finished "rm -rf dst" &&
git clone --recurse-submodules . dst &&
echo base >expect &&
git -C dst/sub log -1 --format=%s >actual &&
test_cmp expect actual
'

test_expect_success 'fsck accepts protected dash' '
test_when_finished "rm -rf dst" &&
git init --bare dst &&
git -C dst config transfer.fsckObjects true &&
git push dst HEAD
'

test_expect_success 'remove ./ protection from .gitmodules url' '
perl -i -pe "s{\./}{}" .gitmodules &&
git commit -am "drop protection"
'

test_expect_success 'clone rejects unprotected dash' '
test_when_finished "rm -rf dst" &&
test_must_fail git clone --recurse-submodules . dst 2>err &&
test_i18ngrep ignoring err
'

test_expect_success 'fsck rejects unprotected dash' '
test_when_finished "rm -rf dst" &&
git init --bare dst &&
git -C dst config transfer.fsckObjects true &&
test_must_fail git push dst HEAD 2>err &&
grep gitmodulesUrl err
'

test_done
28 changes: 28 additions & 0 deletions t/t7417-submodule-path-url.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/bin/sh

test_description='check handling of .gitmodule path with dash'
. ./test-lib.sh

test_expect_success 'create submodule with dash in path' '
git init upstream &&
git -C upstream commit --allow-empty -m base &&
git submodule add ./upstream sub &&
git mv sub ./-sub &&
git commit -m submodule
'

test_expect_success 'clone rejects unprotected dash' '
test_when_finished "rm -rf dst" &&
git clone --recurse-submodules . dst 2>err &&
test_i18ngrep ignoring err
'

test_expect_success 'fsck rejects unprotected dash' '
test_when_finished "rm -rf dst" &&
git init --bare dst &&
git -C dst config transfer.fsckObjects true &&
test_must_fail git push dst HEAD 2>err &&
grep gitmodulesPath err
'

test_done

0 comments on commit 1958ad5

Please sign in to comment.