Re: Bare repositories in the working tree are a security risk
- From
Taylor Blau <me@ttaylorr.com>
- Date
- Apr 21, 2022, 21:22 UTC
- Message-ID
- <YmHK/GJ3qa7QuVUD@nand.local>
- In-Reply-To
- <CAJoAoZnd=BKycr0c71-BQJyO3zoymC7p++Zke+OSkV4neweAOQ@mail.gmail.com>
On Thu, Apr 21, 2022 at 02:01:44PM -0700, Emily Shaffer wrote:
Show 6 quoted lines
> I don't think there is much reason to continue searching above the > first found '.git' because we disallow '.git' from being committed or > checked out, right? So this extra filesystem hunting and ceiling math > seems unnecessary to me. I know I am slightly allergic to searching > the filesystem for a parent repo to begin with, so I'm sure I've got > some bias here ;)
Right; once we find a non-bare embedding repository we should absolutely stop our search. I was suggesting we could stop our search earlier for environments that use non-embedded bare repositories with a fairly deep directory structure.
E.g., if you store lots of bare repositories in /data/repositories and you know that none of them are embedded, we could quickly determine whether or not the cwd is a descendent of /data/repositories and avoid the search entirely if so.
Show 12 quoted lines
> > We'd probably want to allow saying "all embedded bare repositories are > > safe to read config/hooks from", too. I hadn't considered this approach > > as a way to read some embedded repos and not others; I suspect the > > overwhelmingly common use-case would be: `git config --local > > safe.embeddedRepo '*'`. > > Ah, I dislike this option for the exact reason I mentioned - avoiding > a malicious repo being snuck in next to legitimate repos. I'd prefer > to rely on exact matching only - but as the config needs to be set by > every contributor every time the set of bare repos changes, that > sounds impossible to manage for a project which may be constantly > adding and removing these repos.
I share your distaste for this sort of thing, but I think we have to recognize that there are likely to be many repos that embed dozens or more bare repos inside of them, and asking them to opt-in each one individually seems like a fairly large request for Git to make of them.
> That said.... I'm biased again, but if you want to be certain of the > state of another repository in order to run tests in it... why not use > a submodule for that repository? Not a helpful comment for those > already using embedded bare repos, though ;)
Exactly, re: your last sentence.
> Thanks for the food for thought.
Ditto!
Thanks, Taylor