mirror of
https://github.com/postgres/postgres.git
synced 2025-09-03 15:22:11 +03:00
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
This commit is contained in:
@@ -1883,6 +1883,9 @@ plperl_validator(PG_FUNCTION_ARGS)
|
||||
bool is_event_trigger = false;
|
||||
int i;
|
||||
|
||||
if (!CheckFunctionValidatorAccess(fcinfo->flinfo->fn_oid, funcoid))
|
||||
PG_RETURN_VOID();
|
||||
|
||||
/* Get the new function's pg_proc entry */
|
||||
tuple = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcoid));
|
||||
if (!HeapTupleIsValid(tuple))
|
||||
@@ -1964,6 +1967,7 @@ PG_FUNCTION_INFO_V1(plperlu_validator);
|
||||
Datum
|
||||
plperlu_validator(PG_FUNCTION_ARGS)
|
||||
{
|
||||
/* call plperl validator with our fcinfo so it gets our oid */
|
||||
return plperl_validator(fcinfo);
|
||||
}
|
||||
|
||||
|
@@ -290,6 +290,9 @@ plpgsql_validator(PG_FUNCTION_ARGS)
|
||||
bool is_event_trigger = false;
|
||||
int i;
|
||||
|
||||
if (!CheckFunctionValidatorAccess(fcinfo->flinfo->fn_oid, funcoid))
|
||||
PG_RETURN_VOID();
|
||||
|
||||
/* Get the new function's pg_proc entry */
|
||||
tuple = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcoid));
|
||||
if (!HeapTupleIsValid(tuple))
|
||||
|
@@ -160,6 +160,9 @@ plpython_validator(PG_FUNCTION_ARGS)
|
||||
Form_pg_proc procStruct;
|
||||
bool is_trigger;
|
||||
|
||||
if (!CheckFunctionValidatorAccess(fcinfo->flinfo->fn_oid, funcoid))
|
||||
PG_RETURN_VOID();
|
||||
|
||||
if (!check_function_bodies)
|
||||
{
|
||||
PG_RETURN_VOID();
|
||||
@@ -185,6 +188,7 @@ plpython_validator(PG_FUNCTION_ARGS)
|
||||
Datum
|
||||
plpython2_validator(PG_FUNCTION_ARGS)
|
||||
{
|
||||
/* call plpython validator with our fcinfo so it gets our oid */
|
||||
return plpython_validator(fcinfo);
|
||||
}
|
||||
#endif /* PY_MAJOR_VERSION < 3 */
|
||||
|
Reference in New Issue
Block a user