public inbox for git@vger.kernel.org
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Lorenz Leutgeb <lorenz.leutgeb@posteo.eu>
Cc: git@vger.kernel.org
Subject: Re: Push Certificates: Privacy Concerns Regarding the "pushee" Header
Date: Tue, 17 Feb 2026 11:42:57 -0800	[thread overview]
Message-ID: <xmqqldgrb1ha.fsf@gitster.g> (raw)
In-Reply-To: <d180884c-8108-4c8a-9cc7-5314a4f5a45a@posteo.eu> (Lorenz Leutgeb's message of "Sun, 15 Feb 2026 21:58:42 +0000")

Lorenz Leutgeb <lorenz.leutgeb@posteo.eu> writes:

> This would result in push certificates of the following form (hashes 
> abbreviated, signature omitted):
>
> 	certificate version 0.1
> 	pusher SHA256:xX6bp…T0  1771188983 +0100
> 	pushee /home/lorenz/.example/storage/foo
> 	nonce 1771188983-345389c
> 	
> 	0000000 ccae4e0 refs/heads/main
>
> As you can see, this push certificate leaks a path on the application 
> users' filesystem.  Here it is quite obviously my home directory, but 
> actually the "storage path", is user-configurable at the application 
> level, and considered private.

Stepping back a bit, the most important question is what the signer
is trying to certify, isn't it?

"At this point in time, I am pushing to update these refs because I
want these objects to be sitting at the tip of them in the
repository listed as pushee" is the statement the pusher is
certifying.  The auditors can point at the certificate that the
hosting site having the object ccae4e0 is not because insiders of
the hosting site rewounded the tip to point at a stale object that
the pusher did not want to see at the ref, but with that signature,
this pusher expressed their desire to have it at the tip of the main
branch.

Making it possible to lift that certification and reusing it for a
push to different repository smells like opening a door for replay
attacks, doesn't it?  The pusher did not say anything about updating
these refs in other repositories that are different from the pushee
repository.

I am not sure what the implication of optionally allowing the pusher
to sign a certificate that lacks "pushee" is.  Would that be a
reasonable way to say "at this point in time, I want this object to
be at the tip of main branch in _any_ and _all_ clones of this
project anywhere in the world?"  Is that the kind of statement the
pusher would want to make in the first place?  Would such a
statement even make sense?  When you are dealing with two related
repositories of a project (e.g., one may be the main development
repository, the other being the repository for the maintenance
track), I may fully stand behind putting this commit at the tip of
'main' on the development track, but that no way means I would be OK
to put the same commit at the tip of 'main' on the maintenance
track.  Not naming "pushee" does not sound like it would fly well.

What implication does it have to allow the pusher to sign a
certificate that points at a "pushee" that is different from the
repository the signer directly pushed into?  You give the history
together with a signed "I want the object ccae4e0 at the tip of the
main branch" statement to your middleman, and your middleman does
the actual update and forwards your certificate.  I offhand do not
see a huge security problem in that arrangement.  Anybody can check
the certificate and the resulting history and verify the chain of
hashes to the same degree as you would trust SHA-1 (or SHA-256) for
the object integrity and GPG (or whatever you used to sign the push
certificate) for the certificate integrity.


  reply	other threads:[~2026-02-17 19:43 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-15 21:58 Push Certificates: Privacy Concerns Regarding the "pushee" Header Lorenz Leutgeb
2026-02-17 19:42 ` Junio C Hamano [this message]
2026-02-17 20:31   ` Lorenz Leutgeb
2026-02-18  6:00     ` Junio C Hamano
2026-02-18  9:56       ` Lorenz Leutgeb

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=xmqqldgrb1ha.fsf@gitster.g \
    --to=gitster@pobox.com \
    --cc=git@vger.kernel.org \
    --cc=lorenz.leutgeb@posteo.eu \
    /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