Fix search_path to a safe value during maintenance operations.
Jeff Davis <jdavis@postgresql.org>
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 backpatch. Discussion: https://postgr.es/m/e44327179e5c9015c8dda67351c04da552066017.camel%40j-davis.com Reviewed-by: Greg Stark Reviewed-by: Nathan Bossart
Files
| Path | Change | +/− |
|---|---|---|
| contrib/amcheck/verify_nbtree.c | modified | +2 −0 |
| src/backend/access/brin/brin.c | modified | +2 −0 |
| src/backend/catalog/index.c | modified | +8 −0 |
| src/backend/commands/analyze.c | modified | +2 −0 |
| src/backend/commands/cluster.c | modified | +2 −0 |
| src/backend/commands/indexcmds.c | modified | +6 −0 |
| src/backend/commands/matview.c | modified | +2 −0 |
| src/backend/commands/vacuum.c | modified | +2 −0 |
| src/bin/scripts/t/100_vacuumdb.pl | modified | +0 −4 |
| src/include/utils/guc.h | modified | +6 −0 |
| src/test/modules/test_oat_hooks/expected/test_oat_hooks.out | modified | +4 −0 |
| src/test/regress/expected/privileges.out | modified | +6 −6 |
| src/test/regress/expected/vacuum.out | modified | +1 −1 |
| src/test/regress/sql/privileges.sql | modified | +4 −4 |
| src/test/regress/sql/vacuum.sql | modified | +1 −1 |
Discussion
- Fix search_path for all maintenance commands 31 messages · 2023-05-26 → 2024-01-18