mirror of
https://github.com/postgres/postgres.git
synced 2025-11-22 12:22:45 +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:
@@ -723,6 +723,9 @@ fmgr_internal_validator(PG_FUNCTION_ARGS)
|
||||
Datum tmp;
|
||||
char *prosrc;
|
||||
|
||||
if (!CheckFunctionValidatorAccess(fcinfo->flinfo->fn_oid, funcoid))
|
||||
PG_RETURN_VOID();
|
||||
|
||||
/*
|
||||
* We do not honor check_function_bodies since it's unlikely the function
|
||||
* name will be found later if it isn't there now.
|
||||
@@ -768,6 +771,9 @@ fmgr_c_validator(PG_FUNCTION_ARGS)
|
||||
char *prosrc;
|
||||
char *probin;
|
||||
|
||||
if (!CheckFunctionValidatorAccess(fcinfo->flinfo->fn_oid, funcoid))
|
||||
PG_RETURN_VOID();
|
||||
|
||||
/*
|
||||
* It'd be most consistent to skip the check if !check_function_bodies,
|
||||
* but the purpose of that switch is to be helpful for pg_dump loading,
|
||||
@@ -819,6 +825,9 @@ fmgr_sql_validator(PG_FUNCTION_ARGS)
|
||||
bool haspolyarg;
|
||||
int i;
|
||||
|
||||
if (!CheckFunctionValidatorAccess(fcinfo->flinfo->fn_oid, funcoid))
|
||||
PG_RETURN_VOID();
|
||||
|
||||
tuple = SearchSysCache1(PROCOID, ObjectIdGetDatum(funcoid));
|
||||
if (!HeapTupleIsValid(tuple))
|
||||
elog(ERROR, "cache lookup failed for function %u", funcoid);
|
||||
|
||||
Reference in New Issue
Block a user