From b6b220dddb3f76f93947d469274b0aa4852b85ab Mon Sep 17 00:00:00 2001 From: Feike Steenbergen Date: Fri, 16 Dec 2022 11:25:22 +0100 Subject: [PATCH] Prevent pg_stat_statements from recording secrets (#2491) pg_stat_statements is enabled by many by default, but will by default also track utility commands including an ALTER USER john WITH PASSWORD 's3cret' We can prevent this leaking by ensuring that our session currently does not track utility commands when running a sensitive query. Local testing shows that this command works fine, even for those that do not have `pg_stat_statements` configured in their `shared_preload_libraries`. --- patroni/postgresql/bootstrap.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/patroni/postgresql/bootstrap.py b/patroni/postgresql/bootstrap.py index dc693aea..4ade3d1a 100644 --- a/patroni/postgresql/bootstrap.py +++ b/patroni/postgresql/bootstrap.py @@ -315,12 +315,14 @@ END;$$""".format(quote_literal(name), quote_ident(name, self._postgresql.connect self._postgresql.query('SET log_statement TO none') self._postgresql.query('SET log_min_duration_statement TO -1') self._postgresql.query("SET log_min_error_statement TO 'log'") + self._postgresql.query("SET pg_stat_statements.track_utility to 'off'") try: self._postgresql.query(sql) finally: self._postgresql.query('RESET log_min_error_statement') self._postgresql.query('RESET log_min_duration_statement') self._postgresql.query('RESET log_statement') + self._postgresql.query('RESET pg_stat_statements.track_utility') def post_bootstrap(self, config, task): try: