Skip to content
  • Junio C Hamano's avatar
    signed push: fortify against replay attacks · b89363e4
    Junio C Hamano authored
    
    
    In order to prevent a valid push certificate for pushing into an
    repository from getting replayed in a different push operation, send
    a nonce string from the receive-pack process and have the signer
    include it in the push certificate.  The receiving end uses an HMAC
    hash of the path to the repository it serves and the current time
    stamp, hashed with a secret seed (the secret seed does not have to
    be per-repository but can be defined in /etc/gitconfig) to generate
    the nonce, in order to ensure that a random third party cannot forge
    a nonce that looks like it originated from it.
    
    The original nonce is exported as GIT_PUSH_CERT_NONCE for the hooks
    to examine and match against the value on the "nonce" header in the
    certificate to notice a replay, but returned "nonce" header in the
    push certificate is examined by receive-pack and the result is
    exported as GIT_PUSH_CERT_NONCE_STATUS, whose value would be "OK"
    if the nonce recorded in the certificate matches what we expect, so
    that the hooks can more easily check.
    
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    b89363e4