pg.ddx.io  pgsql-hackers@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Nathan Bossart <nathandbossart@gmail.com>
To: pgsql-hackers@postgresql.org
Subject: pg_parameter_aclcheck() and trusted extensions
Date: Wed, 6 Jul 2022 15:47:27 -0700
Message-ID: <20220706224727.GA2158260@nathanxps13> (raw)

Hi hackers,

I found that as of a0ffa88, it's possible to set a PGC_SUSET GUC defined by
a trusted extension as a non-superuser.  I've confirmed that this only
affects v15 and later versions.

	postgres=# CREATE ROLE testuser;
	CREATE ROLE
	postgres=# GRANT CREATE ON DATABASE postgres TO testuser;
	GRANT
	postgres=# SET ROLE testuser;
	SET
	postgres=> SET plperl.on_plperl_init = 'test';
	SET
	postgres=> CREATE EXTENSION plperl;
	CREATE EXTENSION
	postgres=> SELECT setting FROM pg_settings WHERE name = 'plperl.on_plperl_init';
	 setting 
	---------
	 test
	(1 row)

On previous versions, the CREATE EXTENSION command emits the following
WARNING, and the setting does not take effect:

	WARNING:  permission denied to set parameter "plperl.on_plperl_init"

I think the call to superuser_arg() in pg_parameter_aclmask() is causing
set_config_option() to bypass the normal privilege checks, as
execute_extension_script() will have set the user ID to the bootstrap
superuser for trusted extensions like plperl.  I don't have a patch or a
proposal at the moment, but I thought it was worth starting the discussion.

-- 
Nathan Bossart
Amazon Web Services: https://aws.amazon.com





view thread (17+ messages)  latest in thread

Message-ID: <20220706224727.GA2158260@nathanxps13>
Permalink:  ../20220706224727.GA2158260@nathanxps13/
Also on:    postgresql.org/message-id/20220706224727.GA2158260@nathanxps13

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-hackers@postgresql.org
  Cc: nathandbossart@gmail.com
  Subject: Re: pg_parameter_aclcheck() and trusted extensions
  In-Reply-To: <20220706224727.GA2158260@nathanxps13>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox