[PATCHv2 2/3] Add ability to authorize viewing a repository

Ben Boeckel mathstuf at gmail.com
Sun Oct 28 02:00:29 CET 2012


On Mon, Oct 22, 2012 at 08:29:17 GMT, Valentin Haenel wrote:
> @@ -554,6 +557,25 @@ static void process_request(void *cbdata)
>  		return;
>  	}
>  
> +	/* Here we do the authorization check.
> +	 *
> +	 * TODO figure out if this is the correct place to do the check
> +	 *
> +	 */
> +	if (ctx->cfg.authz_exec && ctx->repo &&
> +					system(fmt("%s %s %s",

Single quote the arguments to the executable. This is ripe for code
execution (remote_user is under attacker's control).

> +					ctx->cfg.authz_exec,
> +					ctx->repo->name,
> +					ctx->env.remote_user)) != 0) {
> +		cgit_print_http_headers(ctx);
> +		cgit_print_docstart(ctx);
> +		cgit_print_pageheader(ctx);
> +		cgit_print_error(fmt("Authorization failed for repo: '%s' and user: '%s'",
> +					ctx->repo->name, ctx->env.remote_user));
> +		cgit_print_docend();
> +		return;
> +	}
> +
>  	if (ctx->repo && prepare_repo_cmd(ctx))
>  		return;
>  
> diff --git a/cgit.h b/cgit.h
> index 016baa8e7d..14fc2fb777 100644
> --- a/cgit.h
> +++ b/cgit.h
> @@ -167,6 +167,7 @@ struct cgit_query {
>  struct cgit_config {
>  	char *agefile;
>  	char *user_envvar;
> +	char *authz_exec;

Where is this free'd?

-- Ben





More information about the CGit mailing list