Browse Source

cgi: escape url in 403 error output

Escape the untrusted request URL input in the permission denied HTML output.

This fixes certain XSS vulnerabilities which can be leveraged to further
exploit the system.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Jo-Philipp Wich 5 years ago
parent
commit
cdfc902a4c
1 changed files with 8 additions and 1 deletions
  1. 8 1
      cgi.c

+ 8 - 1
cgi.c

@@ -67,11 +67,18 @@ static void cgi_main(struct client *cl, struct path_info *pi, char *url)
 static void cgi_handle_request(struct client *cl, char *url, struct path_info *pi)
 {
 	unsigned int mode = S_IFREG | S_IXOTH;
+	char *escaped_url;
 
 	if (!pi->ip && !((pi->stat.st_mode & mode) == mode)) {
+		escaped_url = uh_htmlescape(url);
+
 		uh_client_error(cl, 403, "Forbidden",
 				"You don't have permission to access %s on this server.",
-				url);
+				escaped_url ? escaped_url : "the url");
+
+		if (escaped_url)
+			free(escaped_url);
+
 		return;
 	}