Description
CloudNativePG is a platform designed to manage PostgreSQL databases within Kubernetes environments. Prior to 1.29.1 and 1.28.3, the CloudNativePG metrics exporter opens its PostgreSQL connection as the postgres superuser via the pod-local Unix socket, then demotes the session with SET ROLE pg_monitor. SET ROLE changes only current_user; session_user remains postgres. Any SQL expression evaluated inside the scrape session can invoke RESET ROLE to recover real superuser privileges, then use COPY ... TO PROGRAM to spawn an OS-level subprocess as the postgres user inside the primary pod. The READ ONLY transaction flag does not block this; it gates writes to database state, not external processes. This vulnerability is fixed in 1.29.1 and 1.28.3.
Problem types
CWE-250: Execution with Unnecessary Privileges
CWE-271: Privilege Dropping / Lowering Errors
CWE-426: Untrusted Search Path
Product status
>= 1.29.0, < 1.29.1
References
github.com/...ive-pg/security/advisories/GHSA-423p-g724-fr39
github.com/cloudnative-pg/cloudnative-pg/pull/10576