From: Felipe Contreras <felipe.contreras@gmail.com>
To: Elijah Newren <newren@gmail.com>,
Derrick Stolee via GitGitGadget <gitgitgadget@gmail.com>
Cc: git@vger.kernel.org, gitster@pobox.com, me@ttaylorr.com,
christian.couder@gmail.com,
Derrick Stolee <derrickstolee@github.com>
Subject: Re: [PATCH] merge-tree: load default git config
Date: Thu, 11 May 2023 01:45:40 -0600 [thread overview]
Message-ID: <645c9d245c155_16db0a29494@chronos.notmuch> (raw)
In-Reply-To: <CABPp-BECZgACeEUqG3pajJpHAaY=-orNwwOUEX5qqzAKVRMFdQ@mail.gmail.com>
Elijah Newren wrote:
> On Wed, May 10, 2023 at 12:33 PM Derrick Stolee via GitGitGadget
> <gitgitgadget@gmail.com> wrote:
> >
> > From: Derrick Stolee <derrickstolee@github.com>
> >
> > The 'git merge-tree' command handles creating root trees for merges
> > without using the worktree. This is a critical operation in many Git
> > hosts, as they typically store bare repositories.
> >
> > This builtin does not load the default Git config, which can have
> > several important ramifications.
> >
> > In particular, one config that is loaded by default is
> > core.useReplaceRefs. This is typically disabled in Git hosts due to
> > the ability to spoof commits in strange ways.
> >
> > Since this config is not loaded specifically during merge-tree, users
> > were previously able to use refs/replace/ references to make pull
> > requests that looked valid but introduced malicious content. The
> > resulting merge commit would have the correct commit history, but the
> > malicious content would exist in the root tree of the merge.
>
> Ouch! So sorry for creating this problem.
>
> > The fix is simple: load the default Git config in cmd_merge_tree().
> > This may also fix other behaviors that are effected by reading default
> > config. The only possible downside is a little extra computation time
> > spent reading config. The config parsing is placed after basic argument
> > parsing so it does not slow down usage errors.
> >
> > Helped-by: Johannes Schindelin <johannes.schindelin@gmx.de>
> > Signed-off-by: Derrick Stolee <derrickstolee@github.com>
> > ---
> > merge-tree: load default git config
> >
> > This patch was reviewed on the Git security list, but the impact seemed
> > limited to Git forges using merge-ort to create merge commits. The
> > forges represented on the list have deployed versions of this patch and
> > thus are no longer vulnerable.
> >
> > Thanks, -Stolee
> >
> > Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-1530%2Fderrickstolee%2Fstolee%2Frefs-replace-upstream-v1
> > Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-1530/derrickstolee/stolee/refs-replace-upstream-v1
> > Pull-Request: https://github.com/gitgitgadget/git/pull/1530
> >
> > builtin/merge-tree.c | 3 +++
> > t/t4300-merge-tree.sh | 18 ++++++++++++++++++
> > 2 files changed, 21 insertions(+)
> >
> > diff --git a/builtin/merge-tree.c b/builtin/merge-tree.c
> > index aa8040c2a6a..b8f8a8b5d9f 100644
> > --- a/builtin/merge-tree.c
> > +++ b/builtin/merge-tree.c
> > @@ -17,6 +17,7 @@
> > #include "merge-blobs.h"
> > #include "quote.h"
> > #include "tree.h"
> > +#include "config.h"
> >
> > static int line_termination = '\n';
> >
> > @@ -628,6 +629,8 @@ int cmd_merge_tree(int argc, const char **argv, const char *prefix)
> > if (argc != expected_remaining_argc)
> > usage_with_options(merge_tree_usage, mt_options);
> >
> > + git_config(git_default_config, NULL);
> > +
>
> Always nice when it's a simple fix. :-)
>
> I am curious though...
>
> init_merge_options() in merge-recursive.c (which is also used by
> merge-ort) calls merge_recursive_config(). merge_recursive_config()
> does a bunch of config parsing, regardless of whatever config parsing
> is done beforehand by the caller of init_merge_options(). This makes
> me wonder if the config which handles replace refs should be included
> in merge_recursive_config() as well. Doing so would have the added
> benefit of making sure all the builtins calling the merge logic behave
> similarly. And if we copy/move the replace-refs-handling config
> logic, does that replace the fix in this patch, or just supplement it?
>
> To be honest, I've mostly ignored the config side of things while
> working on the merge machinery, so I didn't even know (or at least
> remember) the above details until I went digging just now. I don't
> know if the way init_merge_options()/merge_recursive_config() is how
> we should do things, or just vestiges of how it's evolved from 15
> years ago.
It's obvious this is not the way we should do things as configurations are
overriden when they shouldn't be.
Something like this [1] is obviously needed.
[1] https://lore.kernel.org/git/20210609192842.696646-5-felipe.contreras@gmail.com/
--
Felipe Contreras
next prev parent reply other threads:[~2023-05-11 7:45 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-10 19:07 [PATCH] merge-tree: load default git config Derrick Stolee via GitGitGadget
2023-05-10 19:18 ` Junio C Hamano
2023-05-10 19:26 ` Derrick Stolee
2023-05-10 23:21 ` Taylor Blau
2023-05-11 6:39 ` Elijah Newren
2023-05-10 20:30 ` Felipe Contreras
2023-05-11 15:09 ` Derrick Stolee
2023-05-11 17:02 ` Felipe Contreras
2023-05-11 22:07 ` Felipe Contreras
2023-05-10 22:32 ` Junio C Hamano
2023-05-10 23:27 ` Felipe Contreras
2023-05-11 17:15 ` Felipe Contreras
2023-05-11 6:34 ` Elijah Newren
2023-05-11 7:45 ` Felipe Contreras [this message]
2023-05-11 15:00 ` Derrick Stolee
2023-05-11 21:56 ` [PATCH] merge-tree: load config correctly Felipe Contreras
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=645c9d245c155_16db0a29494@chronos.notmuch \
--to=felipe.contreras@gmail.com \
--cc=christian.couder@gmail.com \
--cc=derrickstolee@github.com \
--cc=git@vger.kernel.org \
--cc=gitgitgadget@gmail.com \
--cc=gitster@pobox.com \
--cc=me@ttaylorr.com \
--cc=newren@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).