|
| 1 | +--- |
| 2 | +title: "CloudNativePG 1.29.1 and 1.28.3 released: critical CVE fix" |
| 3 | +date: 2026-05-08 |
| 4 | +draft: false |
| 5 | +authors: |
| 6 | + - gbartolini |
| 7 | +image: |
| 8 | + url: 58364dde1adc4a0a8.37186404-2048x1445.jpg |
| 9 | + attribution: from <a href="https://wordpress.org/photos/photo/58364dde1a/">Saurabh</a> |
| 10 | +tags: |
| 11 | + - release |
| 12 | + - postgresql |
| 13 | + - postgres |
| 14 | + - kubernetes |
| 15 | + - k8s |
| 16 | + - cloudnativepg |
| 17 | + - cnpg |
| 18 | + - security |
| 19 | + - cve |
| 20 | + - high-availability |
| 21 | +summary: "CloudNativePG 1.29.1 and 1.28.3 are now available. These releases address CVE-2026-44477 (Critical, CVSS 9.4) in the metrics exporter, remediate additional CVEs in pgx and the Go runtime, and ship important HA fixes including a data-safety bug in the failover path. All users should upgrade immediately." |
| 22 | +--- |
| 23 | + |
| 24 | +The CloudNativePG community is releasing **maintenance updates for all |
| 25 | +currently supported series**: **1.29.1** and **1.28.3**. |
| 26 | + |
| 27 | +This is a high-priority release. It addresses **[CVE-2026-44477](https://github.com/cloudnative-pg/cloudnative-pg/security/advisories/GHSA-423p-g724-fr39)** |
| 28 | +(the first CVE officially assigned against CloudNativePG, rated **Critical** |
| 29 | +with a CVSS v4 score of **9.4**), alongside additional CVE remediations in |
| 30 | +dependencies and the Go runtime. |
| 31 | + |
| 32 | +On the reliability side, three independent bugs in the HA failover path are |
| 33 | +resolved, including a label retention issue that could route writes to a former |
| 34 | +primary during a network partition |
| 35 | +([#10409](https://github.com/cloudnative-pg/cloudnative-pg/pull/10409)), a |
| 36 | +condition that prevented failover from triggering when a node became |
| 37 | +unreachable |
| 38 | +([#10448](https://github.com/cloudnative-pg/cloudnative-pg/pull/10448)), and a |
| 39 | +guard against spurious failovers from transient HTTP endpoint failures |
| 40 | +([#10445](https://github.com/cloudnative-pg/cloudnative-pg/pull/10445)). Both |
| 41 | +releases also include a number of correctness and robustness fixes. See the |
| 42 | +release notes for the full list. |
| 43 | + |
| 44 | +**All users should upgrade immediately.** |
| 45 | + |
| 46 | +--- |
| 47 | + |
| 48 | +## Security |
| 49 | + |
| 50 | +### CVE-2026-44477: metrics exporter privilege escalation and OS RCE |
| 51 | + |
| 52 | +The metrics exporter previously opened its PostgreSQL connection as the |
| 53 | +`postgres` superuser and demoted the session with `SET ROLE pg_monitor`. That |
| 54 | +demotion is insufficient: `session_user` remains `postgres`, and any SQL |
| 55 | +evaluated inside the scrape session can call `RESET ROLE` to recover full |
| 56 | +superuser privileges, then use `COPY ... TO PROGRAM` to spawn an arbitrary OS |
| 57 | +process inside the primary pod. |
| 58 | + |
| 59 | +Two independent paths exploit this root cause. The first requires a custom |
| 60 | +metric query with an unqualified relation or function reference; the attack |
| 61 | +completes within one scrape interval (≤ 30 s). The second requires no custom |
| 62 | +metrics at all: the shipped `pg_extensions` metric was sufficient to let the |
| 63 | +default `app` role (created automatically by `bootstrap.initdb`) trigger |
| 64 | +the full escalation chain on a completely stock deployment. The combined impact |
| 65 | +is superuser privilege escalation plus arbitrary OS command execution inside |
| 66 | +the primary pod from a low-privileged database role. |
| 67 | + |
| 68 | +The fix introduces a dedicated `cnpg_metrics_exporter` PostgreSQL role with |
| 69 | +`pg_monitor` privileges only, mapped via `pg_ident.conf` peer authentication |
| 70 | +(the same pattern used for `cnpg_pooler_pgbouncer`). The exporter now connects |
| 71 | +as this role, so `RESET ROLE` has no escalation effect. All shipped monitoring |
| 72 | +queries have also been hardened with explicit `pg_catalog.` qualification |
| 73 | +([#10576](https://github.com/cloudnative-pg/cloudnative-pg/pull/10576)). |
| 74 | + |
| 75 | +For the full technical analysis, exploitation paths, workarounds and upgrade |
| 76 | +impact, refer to the |
| 77 | +[security advisory](https://github.com/cloudnative-pg/cloudnative-pg/security/advisories/GHSA-423p-g724-fr39). |
| 78 | + |
| 79 | +### Additional CVE remediations |
| 80 | + |
| 81 | +These releases also pick up: |
| 82 | + |
| 83 | +- **`github.com/jackc/pgx/v5` v5.9.2**: fixes `CVE-2026-33816` |
| 84 | + (memory-safety in `pgproto3`) and `GHSA-j88v-2chj-qfwx` (SQL injection via |
| 85 | + dollar-quoted string handling in the simple protocol). |
| 86 | + |
| 87 | +- **Go 1.26.3 runtime**: fixes across `crypto/x509`, `crypto/tls`, |
| 88 | + `net/http`, and `net` (CVE-2026-32280, CVE-2026-32281, CVE-2026-33810, |
| 89 | + CVE-2026-33811, CVE-2026-33814, CVE-2026-39825), plus CVE-2026-42501 in |
| 90 | + `cmd/go` module-checksum validation during release builds. |
| 91 | + |
| 92 | +- **Discoverable SBOM and provenance attestations** |
| 93 | + ([#10601](https://github.com/cloudnative-pg/cloudnative-pg/pull/10601)): |
| 94 | + attestations attached to operator images now follow the OCI 1.1 Referrers |
| 95 | + spec, making them automatically discoverable by standard registry tooling and |
| 96 | + supply-chain scanners. |
| 97 | + |
| 98 | +--- |
| 99 | + |
| 100 | +## Acknowledgement |
| 101 | + |
| 102 | +We thank **Mehmet Ince** ([@mdisec](https://github.com/mdisec)) for |
| 103 | +responsibly disclosing CVE-2026-44477, providing a thorough analysis of both |
| 104 | +exploitation paths and a working proof of concept. |
| 105 | + |
| 106 | +--- |
| 107 | + |
| 108 | +## Upgrade |
| 109 | + |
| 110 | +Follow the upgrade instructions specific to your series: |
| 111 | + |
| 112 | +- **1.29.x → 1.29.1:** [upgrade guide](https://cloudnative-pg.io/docs/1.29/installation_upgrade#upgrading-to-1291-or-1283) |
| 113 | +- **1.28.x → 1.28.3:** [upgrade guide](https://cloudnative-pg.io/docs/1.28/installation_upgrade#upgrading-to-1291-or-1283) |
| 114 | + |
| 115 | +For deployments with replica clusters, upgrade the source primary cluster |
| 116 | +first. See the [security advisory](https://github.com/cloudnative-pg/cloudnative-pg/security/advisories/GHSA-423p-g724-fr39) |
| 117 | +for sequencing details. |
| 118 | + |
| 119 | +For the complete list of changes, see the release notes: |
| 120 | + |
| 121 | +- [Release notes for 1.29.1](https://cloudnative-pg.io/docs/1.29/release_notes/v1.29/#version-1291) |
| 122 | +- [Release notes for 1.28.3](https://cloudnative-pg.io/docs/1.28/release_notes/v1.28/#version-1283) |
| 123 | + |
| 124 | +--- |
| 125 | + |
| 126 | +## Get Involved with the Community |
| 127 | + |
| 128 | +[Join us](https://github.com/cloudnative-pg/cloudnative-pg?tab=readme-ov-file#communications) |
| 129 | +to help shape the future of cloud-native Postgres! |
| 130 | + |
| 131 | +If you're using CloudNativePG in production, consider |
| 132 | +[adding your organization as an adopter](https://github.com/cloudnative-pg/cloudnative-pg/blob/main/ADOPTERS.md) |
| 133 | +to support the project's growth and evolution. |
| 134 | + |
| 135 | +Thank you for your continued support! |
| 136 | + |
| 137 | +<!-- |
| 138 | +## About CloudNativePG |
| 139 | +
|
| 140 | +[CloudNativePG](https://cloudnative-pg.io) is an open-source Kubernetes |
| 141 | +Operator specifically designed for PostgreSQL workloads. It manages the entire |
| 142 | +lifecycle of a PostgreSQL cluster, including bootstrapping, configuration, high |
| 143 | +availability, connection routing, and comprehensive backup and disaster |
| 144 | +recovery mechanisms. By leveraging PostgreSQL's native streaming replication, |
| 145 | +CloudNativePG efficiently distributes data across pods, nodes, and zones using |
| 146 | +standard Kubernetes patterns, enabling seamless scaling of replicas in a |
| 147 | +Kubernetes-native manner. Originally developed and supported by |
| 148 | +[EDB](https://www.enterprisedb.com/), CloudNativePG is a CNCF Sandbox project |
| 149 | +and the sole PostgreSQL operator in this category. |
| 150 | +--> |
0 commit comments