Fix search_path to a safe value during maintenance operations.
authorJeff Davis <[email protected]>
Fri, 9 Jun 2023 18:20:47 +0000 (11:20 -0700)
committerJeff Davis <[email protected]>
Fri, 9 Jun 2023 18:20:47 +0000 (11:20 -0700)
commit05e17373517114167d002494e004fa0aa32d1fd1
tree2d96a124ad8a75d5d717d930f634c985f48e4166
parent9aee26a491ba9b7ceff40e6192183ab7200b6bfb
Fix search_path to a safe value during maintenance operations.

While executing maintenance operations (ANALYZE, CLUSTER, REFRESH
MATERIALIZED VIEW, REINDEX, or VACUUM), set search_path to
'pg_catalog, pg_temp' to prevent inconsistent behavior.

Functions that are used for functional indexes, in index expressions,
or in materialized views and depend on a different search path must be
declared with CREATE FUNCTION ... SET search_path='...'.

This change addresses a security risk introduced in commit 60684dd834,
where a role with MAINTAIN privileges on a table may be able to
escalate privileges to the table owner. That commit is not yet part of
any release, so no need to back.

Discussion: https://postgr.es/m/e44327179e5c9015c8dda67351c04da552066017.camel%40j-davis.com
Reviewed-by: Greg Stark
Reviewed-by: Nathan Bossart
15 files changed:
contrib/amcheck/verify_nbtree.c
src/backend/access/brin/brin.c
src/backend/catalog/index.c
src/backend/commands/analyze.c
src/backend/commands/cluster.c
src/backend/commands/indexcmds.c
src/backend/commands/matview.c
src/backend/commands/vacuum.c
src/bin/scripts/t/100_vacuumdb.pl
src/include/utils/guc.h
src/test/modules/test_oat_hooks/expected/test_oat_hooks.out
src/test/regress/expected/privileges.out
src/test/regress/expected/vacuum.out
src/test/regress/sql/privileges.sql
src/test/regress/sql/vacuum.sql