clone: drop the protections where hooks aren't run
commit873a466ea3f233d4fb11f894a311de06939a2a3e
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Mon, 20 May 2024 20:22:04 +0000 (20 20:22 +0000)
committerJunio C Hamano <gitster@pobox.com>
Tue, 21 May 2024 19:33:08 +0000 (21 12:33 -0700)
tree65fdbd72ad42a147cb43af11cd9055d9f3ad031b
parentc8f64781c8b3d44ecb57d14fbffcdbf063583812
clone: drop the protections where hooks aren't run

As part of the security bug-fix releases v2.39.4, ..., v2.45.1, I
introduced logic to safeguard `git clone` from running hooks that were
installed _during_ the clone operation.

The rationale was that Git's CVE-2024-32002, CVE-2021-21300,
CVE-2019-1354, CVE-2019-1353, CVE-2019-1352, and CVE-2019-1349 should
have been low-severity vulnerabilities but were elevated to
critical/high severity by the attack vector that allows a weakness where
files inside `.git/` can be inadvertently written during a `git clone`
to escalate to a Remote Code Execution attack by virtue of installing a
malicious `post-checkout` hook that Git will then run at the end of the
operation without giving the user a chance to see what code is executed.

Unfortunately, Git LFS uses a similar strategy to install its own
`post-checkout` hook during a `git clone`; In fact, Git LFS is
installing four separate hooks while running the `smudge` filter.

While this pattern is probably in want of being improved by introducing
better support in Git for Git LFS and other tools wishing to register
hooks to be run at various stages of Git's commands, let's undo the
clone protections to unbreak Git LFS-enabled clones.

This reverts commit 8db1e8743c0 (clone: prevent hooks from running
during a clone, 2024-03-28).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/clone.c
hook.c
t/t5601-clone.sh