diff options
author | Noah Misch <noah@leadboat.com> | 2014-02-17 09:33:31 -0500 |
---|---|---|
committer | Noah Misch <noah@leadboat.com> | 2014-02-17 09:33:38 -0500 |
commit | 823b9dc2566dbdbdab3c08b83adb64eb428b8ca5 (patch) | |
tree | d275d3e31ab3070af84d25f1e19f9951bc3e0560 /src/pl/plperl/plperl.c | |
parent | ff35425c8f81541c8dc10486ed21ef1cfdae693e (diff) | |
download | postgresql-823b9dc2566dbdbdab3c08b83adb64eb428b8ca5.tar.gz postgresql-823b9dc2566dbdbdab3c08b83adb64eb428b8ca5.zip |
Prevent privilege escalation in explicit calls to PL validators.
The primary role of PL validators is to be called implicitly during
CREATE FUNCTION, but they are also normal functions that a user can call
explicitly. Add a permissions check to each validator to ensure that a
user cannot use explicit validator calls to achieve things he could not
otherwise achieve. Back-patch to 8.4 (all supported versions).
Non-core procedural language extensions ought to make the same two-line
change to their own validators.
Andres Freund, reviewed by Tom Lane and Noah Misch.
Security: CVE-2014-0061
Diffstat (limited to 'src/pl/plperl/plperl.c')
-rw-r--r-- | src/pl/plperl/plperl.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/pl/plperl/plperl.c b/src/pl/plperl/plperl.c index 01c95ff6b14..b65ea31a86c 100644 --- a/src/pl/plperl/plperl.c +++ b/src/pl/plperl/plperl.c @@ -1094,6 +1094,9 @@ plperl_validator(PG_FUNCTION_ARGS) bool istrigger = false; int i; + if (!CheckFunctionValidatorAccess(fcinfo->flinfo->fn_oid, funcoid)) + PG_RETURN_VOID(); + /* Get the new function's pg_proc entry */ tuple = SearchSysCache(PROCOID, ObjectIdGetDatum(funcoid), |