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

[PATCH 08/12] Revert "core.hooksPath: add some protection while cloning"

From
Junio C Hamano <gitster@pobox.com>
Date
May 21, 2024, 19:56 UTC
Message-ID
<20240521195659.870714-9-gitster@pobox.com>
In-Reply-To
<20240521195659.870714-1-gitster@pobox.com>
From: Johannes Schindelin <johannes.schindelin@gmx.de>

This defense-in-depth was intended to protect the clone operation against future escalations where bugs in `git clone` would allow attackers to write arbitrary files in the `.git/` directory would allow for Remote Code Execution attacks via maliciously-placed hooks.

However, it turns out that the `core.hooksPath` protection has unintentional side effects so severe that they do not justify the benefit of the protections. For example, it has been reported in https://lore.kernel.org/git/FAFA34CB-9732-4A0A-87FB-BDB272E6AEE8@alchemists.io/ that the following invocation, which is intended to make `git clone` safer, is itself broken by that protective measure:

	git clone --config core.hooksPath=/dev/null <url>

Since it turns out that the benefit does not justify the cost, let's revert 20f3588efc6 (core.hooksPath: add some protection while cloning, 2024-03-30).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 config.c        | 13 +------------
 t/t1800-hook.sh | 15 ---------------
 2 files changed, 1 insertion(+), 27 deletions(-)
diff --git a/config.c b/config.c
index 85b37f2ee0..8c1c4071f0 100644
--- a/config.c
+++ b/config.c
@@ -1525,19 +1525,8 @@ static int git_default_core_config(const char *var, const char *value, void *cb)
 	if (!strcmp(var, "core.attributesfile"))
 		return git_config_pathname(&git_attributes_file, var, value);
 
-	if (!strcmp(var, "core.hookspath")) {
-		if (current_config_scope() == CONFIG_SCOPE_LOCAL &&
-		    git_env_bool("GIT_CLONE_PROTECTION_ACTIVE", 0))
-			die(_("active `core.hooksPath` found in the local "
-			      "repository config:\n\t%s\nFor security "
-			      "reasons, this is disallowed by default.\nIf "
-			      "this is intentional and the hook should "
-			      "actually be run, please\nrun the command "
-			      "again with "
-			      "`GIT_CLONE_PROTECTION_ACTIVE=false`"),
-			    value);
+	if (!strcmp(var, "core.hookspath"))
 		return git_config_pathname(&git_hooks_path, var, value);
-	}
 
 	if (!strcmp(var, "core.bare")) {
 		is_bare_repository_cfg = git_config_bool(var, value);
diff --git a/t/t1800-hook.sh b/t/t1800-hook.sh
index 7ee12e6f48..2ef3579fa7 100755
--- a/t/t1800-hook.sh
+++ b/t/t1800-hook.sh
@@ -177,19 +177,4 @@ test_expect_success 'git hook run a hook with a bad shebang' '
 	test_cmp expect actual
 '
 
-test_expect_success 'clone protections' '
-	test_config core.hooksPath "$(pwd)/my-hooks" &&
-	mkdir -p my-hooks &&
-	write_script my-hooks/test-hook <<-\EOF &&
-	echo Hook ran $1
-	EOF
-
-	git hook run test-hook 2>err &&
-	grep "Hook ran" err &&
-	test_must_fail env GIT_CLONE_PROTECTION_ACTIVE=true \
-		git hook run test-hook 2>err &&
-	grep "active .core.hooksPath" err &&
-	! grep "Hook ran" err
-'
-
 test_done
-- 
2.45.1-216-g4365c6fcf9
Previous: Junio C HamanoNext: Junio C Hamano
Message 11 of 36 in “Fix various overly aggressive protections in 2.45.1 and friends”
  1. 00/12 Fix various overly aggressive protections in 2.45.1 and friendsJunio C Hamano, May 21, 2024
  2. 02/12 send-email: avoid creating more than one Term::ReadLine objectJunio C Hamano, May 21, 2024
  3. Dragan SimicMay 22, 2024
  4. 03/12 ci: drop mention of BREW_INSTALL_PACKAGES variableJunio C Hamano, May 21, 2024
  5. 01/12 send-email: drop FakeTerm hackJunio C Hamano, May 21, 2024
  6. Dragan SimicMay 22, 2024
  7. 04/12 ci: avoid bare "gcc" for osx-gcc jobJunio C Hamano, May 21, 2024
  8. 05/12 ci: stop installing "gcc-13" for osx-gccJunio C Hamano, May 21, 2024
  9. 06/12 hook: plug a new memory leakJunio C Hamano, May 21, 2024
  10. 07/12 init: use the correct path of the templates directory againJunio C Hamano, May 21, 2024
  11. 08/12 Revert "core.hooksPath: add some protection while cloning"Junio C Hamano, May 21, 2024
  12. 09/12 tests: verify that `clone -c core.hooksPath=/dev/null` works againJunio C Hamano, May 21, 2024
  13. Brooke KuhlmannMay 21, 2024
  14. 10/12 clone: drop the protections where hooks aren't runJunio C Hamano, May 21, 2024
  15. 11/12 Revert "Add a helper function to compare file contents"Junio C Hamano, May 21, 2024
  16. 12/12 Revert "fetch/clone: detect dubious ownership of local repositories"Junio C Hamano, May 21, 2024
  17. Junio C HamanoMay 21, 2024
  18. Johannes SchindelinMay 22, 2024
  19. Junio C HamanoMay 22, 2024
  20. 13/12 Merge branch 'jc/fix-aggressive-protection-2.39'Junio C Hamano, May 21, 2024
  21. Reviewing merge commits, was Re: [rPATCH 13/12] Merge branch 'jc/fix-aggressive-protection-2.39'Johannes Schindelin, May 23, 2024
  22. Junio C HamanoMay 23, 2024
  23. 14/12 Merge branch 'jc/fix-aggressive-protection-2.40'Junio C Hamano, May 21, 2024
  24. Junio C HamanoMay 21, 2024
  25. Johannes SchindelinMay 21, 2024
  26. Junio C HamanoMay 21, 2024
  27. Junio C HamanoMay 21, 2024
  28. Joey HessMay 22, 2024
  29. Junio C HamanoMay 23, 2024
  30. Joey HessMay 23, 2024
  31. Johannes SchindelinMay 27, 2024
  32. Joey HessMay 28, 2024
  33. Phillip WoodMay 28, 2024
  34. Junio C HamanoMay 28, 2024
  35. Junio C HamanoMay 28, 2024
  36. Junio C HamanoMay 23, 2024

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.