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

Re: [PATCH v2 0/8] CDN offloading of fetch response

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Apr 24, 2019, 09:09 UTC
Message-ID
<87pnpbsra8.fsf@evledraar.gmail.com>
In-Reply-To
<cover.1552073690.git.jonathantanmy@google.com>
On Fri, Mar 08 2019, Jonathan Tan wrote:
Show 18 quoted lines
> One relatively significant change: someone pointed out that the issue fixed by
> 50d3413740 ("http: make redirects more obvious", 2016-12-06) could also
> occur here, so I have changed it so that the server is required to send
> the packfile's hash along with the URI.
>
> This does mean that Ævar's workflow described in
> https://public-inbox.org/git/87k1hv6eel.fsf@evledraar.gmail.com/ would
> not work.  Quoting Ævar:
>
>> More concretely, I'd like to have a setup where a server can just dumbly
>> point to some URL that probably has most of the data, without having any
>> idea what OIDs are in it. So that e.g. some machine entirely
>> disconnected from the server (and with just a regular clone) can
>> continually generating an up-to-date-enough packfile.
>
> With 50d3413740, it seems to me that it's important for the server to
> know details about the URIs that it points to, so such a disconnection
> would not work.

For what it's worth I'm fine with that, and as is obvious in some of the previous threads I hadn't thought about that threat model. This "I know XYZ has a pack that should have most of it, check what's in it and get back to me with HAVEs" was a nice-to-have, but not a must.

And you can still get most of the way there with this proposal and the techniques described in the follow-up to https://public-inbox.org/git/87bmhiykvw.fsf@evledraar.gmail.com/ if I'm reading this series correctly.

I.e. the server would know the CDNs are going to be generating a pack from the "master" history with the tip being the Nth commit, and since both agree on the pack algorithm they can generate the same OID/pack hash pair without further coordination, the server would then optimistically advertise that. This would give you the sort of "lazy" CDN setup I was describing with slightly more work than just "here's some random latest pack".

But isn't in the case that if a malicious server ever got a hold of a pack SHA-1 it knows to be on a private CDN *and* a commit that's in it we'd have the same problem? Shouldn't this security model be prominently documented in Documentation/technical/packfile-uri.txt? I.e. "THOU MUST NEVER LEAK A COMBINATION OF THE PACK SHA-1 OF A PRIVATE CDN AND A PRIVATE COMMIT SHA-1!".

It seems likely that once we have git CDN support the first thing CDNs are going to do is to serve up such packs via a URL that includes the pack SHA-1. Once the combination of that & a commit in it leaks we're back to square one, no? *My* default approach in setting up such infrastructure without knowing about 50d3413740 would be not to care about the privacy of the SHA-1s, even in the case of private data.

Isn't there also overlap here with non-CDN shallow/narrow fetching? Where a server can detect such a client, rely on it to get the objects from elsewhere (e.g. via adding an unrelated remote), and then get a push that gives it secret data?

I don't see any fool-proof way out of it, but maybe a mode where we:
 1. Get the CDN data URLs (which for the purposes of this example I'm
    assuming are "base packs" containing at least some commits...)
 2. Do a follow-up request to the server where we e.g. pretend not to
    have the last N commits for tips it advertises and ask it to serve
    that up from a non-CDN. If it can't we know it's lying and trying an
    attack similar to the one described in 50d3413740.
    Conversely, can't know if it can that it isn't, but at that point it
    seems unlikely, since surely the useful thing is a delta against the
    recent-but-server-lied-about-having-it commit, at least in most
    cases....

This would also have the advantage of addressing some of the reliability concerns brought up elsewhere. I.e. once we're doing a sanity-check post-fetch anyway a failure to download 1/3 packs from a CDN becomes recoverable, although the design outlined here (understandably) would prefer that to be done in another "fetch" dialog so the server can keep the "CDN + my data should be 100% of the data" state.

Previous: Jonathan Tan
Message 45 of 45 in “[WIP 0/7] CDN offloading of fetch response”
  1. Jonathan TanFeb 23, 2019
  2. 1/7 http: use --stdin and --keep when downloading packJonathan Tan, Feb 23, 2019
  3. 2/7 http: improve documentation of http_pack_requestJonathan Tan, Feb 23, 2019
  4. 3/7 http-fetch: support fetching packfiles by URLJonathan Tan, Feb 23, 2019
  5. 4/7 Documentation: order protocol v2 sectionsJonathan Tan, Feb 23, 2019
  6. 5/7 Documentation: add Packfile URIs design docJonathan Tan, Feb 23, 2019
  7. 6/7 upload-pack: refactor reading of pack-objects outJonathan Tan, Feb 23, 2019
  8. 7/7 upload-pack: send part of packfile response as uriJonathan Tan, Feb 23, 2019
  9. Junio C HamanoFeb 24, 2019
  10. Christian CouderFeb 25, 2019
  11. Jonathan NiederFeb 26, 2019
  12. Christian CouderFeb 26, 2019
  13. Josh SteadmonMar 1, 2019
  14. Jonathan TanMar 1, 2019
  15. Christian CouderFeb 25, 2019
  16. Jonathan NiederFeb 25, 2019
  17. Christian CouderFeb 26, 2019
  18. Ævar Arnfjörð BjarmasonFeb 26, 2019
  19. Christian CouderMar 4, 2019
  20. Jonathan NiederFeb 28, 2019
  21. Christian CouderMar 4, 2019
  22. 0/8 CDN offloading of fetch responseJonathan Tan, Mar 8, 2019
  23. 1/8 http: use --stdin when getting dumb HTTP packJonathan Tan, Mar 8, 2019
  24. 2/8 http: improve documentation of http_pack_requestJonathan Tan, Mar 8, 2019
  25. 3/8 http-fetch: support fetching packfiles by URLJonathan Tan, Mar 8, 2019
  26. 4/8 Documentation: order protocol v2 sectionsJonathan Tan, Mar 8, 2019
  27. 5/8 Documentation: add Packfile URIs design docJonathan Tan, Mar 8, 2019
  28. Jeff KingApr 23, 2019
  29. Jonathan TanApr 23, 2019
  30. Ævar Arnfjörð BjarmasonApr 23, 2019
  31. Jonathan NiederApr 23, 2019
  32. Ævar Arnfjörð BjarmasonApr 23, 2019
  33. Jonathan NiederApr 23, 2019
  34. Jonathan NiederApr 23, 2019
  35. Ævar Arnfjörð BjarmasonApr 23, 2019
  36. Jonathan NiederApr 23, 2019
  37. Ævar Arnfjörð BjarmasonApr 24, 2019
  38. Junio C HamanoApr 24, 2019
  39. 6/8 upload-pack: refactor reading of pack-objects outJonathan Tan, Mar 8, 2019
  40. 7/8 fetch-pack: support more than one pack lockfileJonathan Tan, Mar 8, 2019
  41. 8/8 upload-pack: send part of packfile response as uriJonathan Tan, Mar 8, 2019
  42. Josh SteadmonMar 19, 2019
  43. Jeff KingApr 23, 2019
  44. Jonathan TanApr 23, 2019
  45. Ævar Arnfjörð BjarmasonApr 24, 2019

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.