shithub: git9

Download patch

ref: 882bbb257682215300e7eb10dca1a4e38c7e9f11
parent: 3e15556a23f5138a64d88bf84d069d21540e9e2d
author: Ori Bernstein <[email protected]>
date: Sun Sep 6 13:18:34 EDT 2020

git/serve: check that we're within the prefix

Don't let people escape git9 paths with '..' tricks.

--- a/serve.c
+++ b/serve.c
@@ -1,6 +1,5 @@
 #include <u.h>
 #include <libc.h>
-#include <pool.h>
 #include <ctype.h>
 
 #include "git.h"
@@ -450,6 +449,9 @@
 	p = parsecmd(buf, cmd, sizeof(cmd));
 	if(snprint(path, sizeof(path), "%s/%s", pathpfx, p) == sizeof(path))
 		sysfatal("%s: path too long\n", p);
+	cleanname(path);
+	if(strncmp(path, pathpfx) != 0)
+		sysfatal("%s: path escapes prefix");
 	if(chdir(path) == -1)
 		sysfatal("cd %s: %r", p);
 	if(access(".git", AREAD) == -1)