git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 0/3] credential: handle partial URLs in config settings again

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Apr 22, 2020, 22:26 UTC
Message-ID
<nycvar.QRO.7.76.6.2004230019170.18039@tvgsbejvaqbjf.bet>
In-Reply-To
<20200422221334.GA571740@coredump.intra.peff.net>
Hi Peff,
On Wed, 22 Apr 2020, Jeff King wrote:
Show 22 quoted lines
> On Wed, Apr 22, 2020 at 08:51:02PM +0000, Johannes Schindelin via GitGitGadget wrote:
>
> > This fixes the problem illustrated by Peff's example
> > [https://lore.kernel.org/git/20200422040644.GC3559880@coredump.intra.peff.net/]
> > , in maint-2.17:
> >
> >   $ echo url=https://example.com |
> >     git -c credential.example.com.username=foo credential fill
> >   warning: url has no scheme: example.com
> >   fatal: credential url cannot be parsed: example.com
> >
> > The fix is necessarily different than what was proposed by brian
> > [https://lore.kernel.org/git/20200422012344.2051103-1-sandals@crustytoothpaste.net/]
> > because that fix targets v2.26.x which has 46fd7b390034 (credential: allow
> > wildcard patterns when matching config, 2020-02-20).
> >
> > This patch series targets maint-2.17 instead (and might actually not be able
> > to fix maint due to that wildcard pattern patch; I haven't had the time to
> > check yet).
>
> Yes, this will remove the die() in all versions, but in v2.26.0 and up,
> that config would be silently ignored (and your new test will fail).
Thanks for testing!
Show 16 quoted lines
> > Please note that Git v2.17.4 will not do what we would expect here: if any
> > host name (without protocol) is specified, e.g. -c
> > credential.golli.wog.username = boo, it will actually ignore the host name.
> > That is, this will populate the username:
> >
> >   $ echo url=https://example.com |
> >     git -c credential.totally.bog.us.username=foo credential fill
>
> That seems scary. What if it is not .username, but:
>
>   [credential "example.com"]
>   username = foo
>   helper = "!echo password=bar"
>
> ? (Or you can imagine a helper that is pulling from a read-only store,
> like "pass"). That would send the credential to the wrong host.

It would. But I am not aware of any implications regarding `.gitmodules` (for some reason I now expect every bug to open an attack vector via submodules, I wonder why that is), so that's at least good.

There do seem to be a few projects that set a `credential.<hostname>.useHTTPPath` as part of their build, but I doubt that that could be exploited.

> I think any fix we do here needs to make sure we are not any
> reintroducing wrong-host problems (though I do admit that the usage like
> my example above is probably way less common than vanilla helpers that
> do the host-selection themselves).

Yes. For the record, I tried to be very careful here. The _only_ code path that is affected by this change is the config reading. Reading `.gitmodules` (also in `fsck.c`) should behave identically to the way v2.17.5 behaves: they should not allow empty protocol or hostname. If you spot any difference in behavior in this regard, please do let me know: that would be a bug.

And I do not think that these patches could re-introduce the problems you fixed: the `credential_match()` tries to work against a `struct credential` that has been sent to `credential_apply_config()` and as per your fixes, this function now verifies that neither protocol nor hostname are unset.

But again, I would love another pair of eyes on this, to confirm my analysis.

Thanks, Dscho

Previous: Jeff KingNext: Jonathan Nieder
Message 21 of 48 in “credential: handle partial URLs in config settings again”
  1. 0/3 credential: handle partial URLs in config settings againJohannes Schindelin via GitGitGadget, Apr 22, 2020
  2. 1/3 credential: fix grammarJohannes Schindelin via GitGitGadget, Apr 22, 2020
  3. Jonathan NiederApr 22, 2020
  4. 3/3 credential: handle `credential.<partial-URL>.<key>` againJohannes Schindelin via GitGitGadget, Apr 22, 2020
  5. Jonathan NiederApr 22, 2020
  6. Johannes SchindelinApr 23, 2020
  7. 2/3 credential: teach `credential_from_url()` a non-strict modeJohannes Schindelin via GitGitGadget, Apr 22, 2020
  8. Junio C HamanoApr 22, 2020
  9. Johannes SchindelinApr 22, 2020
  10. Junio C HamanoApr 22, 2020
  11. Jonathan NiederApr 22, 2020
  12. Carlo ArenasApr 23, 2020
  13. Johannes SchindelinApr 23, 2020
  14. Carlo Marcelo Arenas BelónApr 23, 2020
  15. Johannes SchindelinApr 23, 2020
  16. Junio C HamanoApr 23, 2020
  17. Junio C HamanoApr 23, 2020
  18. Johannes SchindelinApr 23, 2020
  19. Johannes SchindelinApr 23, 2020
  20. Jeff KingApr 22, 2020
  21. Johannes SchindelinApr 22, 2020
  22. Jonathan NiederApr 22, 2020
  23. Johannes SchindelinApr 23, 2020
  24. 0/3 credential: handle partial URLs in config settings againJohannes Schindelin via GitGitGadget, Apr 23, 2020
  25. 2/3 credential: optionally allow partial URLs in credential_from_url_gently()Johannes Schindelin via GitGitGadget, Apr 23, 2020
  26. 3/3 credential: handle `credential.<partial-URL>.<key>` againJohannes Schindelin via GitGitGadget, Apr 23, 2020
  27. Carlo Marcelo Arenas BelónApr 24, 2020
  28. Johannes SchindelinApr 24, 2020
  29. Carlo Marcelo Arenas BelónApr 24, 2020
  30. Johannes SchindelinApr 24, 2020
  31. Junio C HamanoApr 24, 2020
  32. Junio C HamanoApr 24, 2020
  33. Johannes SchindelinApr 24, 2020
  34. 1/3 credential: fix grammarJohannes Schindelin via GitGitGadget, Apr 23, 2020
  35. Carlo Marcelo Arenas BelónApr 24, 2020
  36. 0/3 credential: handle partial URLs in config settings againJohannes Schindelin via GitGitGadget, Apr 24, 2020
  37. 1/3 credential: fix grammarJohannes Schindelin via GitGitGadget, Apr 24, 2020
  38. 3/3 credential: handle `credential.<partial-URL>.<key>` againJohannes Schindelin via GitGitGadget, Apr 24, 2020
  39. Carlo Marcelo Arenas BelónApr 24, 2020
  40. Johannes SchindelinApr 25, 2020
  41. Junio C HamanoApr 24, 2020
  42. Johannes SchindelinApr 24, 2020
  43. Junio C HamanoApr 28, 2020
  44. Johannes SchindelinApr 29, 2020
  45. Junio C HamanoApr 29, 2020
  46. Johannes SchindelinMay 1, 2020
  47. Junio C HamanoMay 1, 2020
  48. 2/3 credential: optionally allow partial URLs in credential_from_url_gently()Johannes Schindelin via GitGitGadget, Apr 24, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.