mirror of
https://github.com/git/git
synced 2024-08-28 20:20:07 +00:00
![Matt McCutchen](/assets/img/avatar_default.png)
The "SECURITY" section of the gitnamespaces(7) man page described two ways for a client to steal data from a server that wasn't intended to be shared. Similar attacks can be performed by a server on a client, so adapt the section to cover both directions and add it to the git-fetch(1), git-pull(1), and git-push(1) man pages. Also add references to this section from the documentation of server configuration options that attempt to control data leakage but may not be fully effective. Signed-off-by: Matt McCutchen <matt@mattmccutchen.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
31 lines
1.7 KiB
Plaintext
31 lines
1.7 KiB
Plaintext
SECURITY
|
|
--------
|
|
The fetch and push protocols are not designed to prevent one side from
|
|
stealing data from the other repository that was not intended to be
|
|
shared. If you have private data that you need to protect from a malicious
|
|
peer, your best option is to store it in another repository. This applies
|
|
to both clients and servers. In particular, namespaces on a server are not
|
|
effective for read access control; you should only grant read access to a
|
|
namespace to clients that you would trust with read access to the entire
|
|
repository.
|
|
|
|
The known attack vectors are as follows:
|
|
|
|
. The victim sends "have" lines advertising the IDs of objects it has that
|
|
are not explicitly intended to be shared but can be used to optimize the
|
|
transfer if the peer also has them. The attacker chooses an object ID X
|
|
to steal and sends a ref to X, but isn't required to send the content of
|
|
X because the victim already has it. Now the victim believes that the
|
|
attacker has X, and it sends the content of X back to the attacker
|
|
later. (This attack is most straightforward for a client to perform on a
|
|
server, by creating a ref to X in the namespace the client has access
|
|
to and then fetching it. The most likely way for a server to perform it
|
|
on a client is to "merge" X into a public branch and hope that the user
|
|
does additional work on this branch and pushes it back to the server
|
|
without noticing the merge.)
|
|
|
|
. As in #1, the attacker chooses an object ID X to steal. The victim sends
|
|
an object Y that the attacker already has, and the attacker falsely
|
|
claims to have X and not Y, so the victim sends Y as a delta against X.
|
|
The delta reveals regions of X that are similar to Y to the attacker.
|