This is an automated email from the ASF dual-hosted git repository.
dabla pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/airflow.git
The following commit(s) were added to refs/heads/main by this push:
new fd9298bf795 Chart: Bump PgBouncer to 1.25.2 and exporter to 0.21.0 to
fix CVEs (#74647)
fd9298bf795 is described below
commit fd9298bf79590d102ecfe1a8ce8ffd230e02abf4
Author: Mathieu Monet <[email protected]>
AuthorDate: Wed Oct 28 14:10:36 2026 +0100
Chart: Bump PgBouncer to 1.25.2 and exporter to 0.21.0 to fix CVEs (#74647)
* Chart: Bump PgBouncer to 1.25.2 and exporter to 0.21.0 to fix CVEs
Update the default PgBouncer image to PgBouncer 1.25.2, which fixes
CVE-2026-6664, CVE-2026-6665 and CVE-2026-6666. CVE-2026-6664 lets an
unauthenticated client crash PgBouncer with a malformed SCRAM packet,
and the chart uses scram-sha-256 by default.
Update the PgBouncer exporter image to 0.21.0 built with Go 1.27.2.
Exporter 0.18.0 cannot parse the SHOW STATS columns added in PgBouncer
1.24, which is why the previous 1.24 bump was rolled back.
Both images are rebuilt on the current Alpine 3.23 with apk upgrade,
and unused runtime packages (libressl, libressl-dev, openssl) are
dropped.
* Rename PgBouncer newsfragment to PR number
* Clarify which PgBouncer behaviour changes can be restored
Review feedback: 1.25.2 also fixes CVE-2026-6667, and not every behaviour
change listed can be set back through pgbouncer.extraIni. reserve_pool is a
per-database setting whose old name still works, and the KILL_CLIENT and
auth_query changes are security fixes.
---------
Co-authored-by: Mathieu Monet <[email protected]>
Co-authored-by: David Blain <[email protected]>
---
chart/dockerfiles/pgbouncer-exporter/Dockerfile | 9 ++++-----
.../dockerfiles/pgbouncer-exporter/build_and_push.sh | 8 ++++----
chart/dockerfiles/pgbouncer/Dockerfile | 8 ++++++--
chart/dockerfiles/pgbouncer/build_and_push.sh | 8 ++++----
chart/newsfragments/74647.significant.rst | 19 +++++++++++++++++++
chart/values.schema.json | 4 ++--
chart/values.yaml | 4 ++--
7 files changed, 41 insertions(+), 19 deletions(-)
diff --git a/chart/dockerfiles/pgbouncer-exporter/Dockerfile
b/chart/dockerfiles/pgbouncer-exporter/Dockerfile
index 7a290aa713a..b4abe1e7b21 100644
--- a/chart/dockerfiles/pgbouncer-exporter/Dockerfile
+++ b/chart/dockerfiles/pgbouncer-exporter/Dockerfile
@@ -16,7 +16,7 @@
# under the License.
ARG ALPINE_VERSION="3.23"
-ARG GO_VERSION="1.23.7"
+ARG GO_VERSION="1.27.2"
FROM golang:${GO_VERSION} AS builder
@@ -37,10 +37,9 @@ RUN
URL="https://github.com/jbub/pgbouncer_exporter/archive/${PGBOUNCER_EXPORTER
FROM alpine:${ALPINE_VERSION} AS final
-# We want to make sure this one includes latest security fixes.
-# "Pin versions in apk add" https://github.com/hadolint/hadolint/wiki/DL3018
-# hadolint ignore=DL3018
-RUN apk --no-cache add libressl libressl-dev openssl
+# The exporter is a static (CGO_ENABLED=0) binary, so no extra runtime
libraries are needed.
+# We only want to make sure the base image includes latest security fixes.
+RUN apk --no-cache upgrade
COPY --from=builder /usr/src/myapp/pgbouncer_exporter /bin
diff --git a/chart/dockerfiles/pgbouncer-exporter/build_and_push.sh
b/chart/dockerfiles/pgbouncer-exporter/build_and_push.sh
index b5cd45becb4..a207cbd9500 100755
--- a/chart/dockerfiles/pgbouncer-exporter/build_and_push.sh
+++ b/chart/dockerfiles/pgbouncer-exporter/build_and_push.sh
@@ -21,19 +21,19 @@ readonly DOCKERHUB_USER
DOCKERHUB_REPO=${DOCKERHUB_REPO:="airflow"}
readonly DOCKERHUB_REPO
-PGBOUNCER_EXPORTER_VERSION="0.18.0"
+PGBOUNCER_EXPORTER_VERSION="0.21.0"
readonly PGBOUNCER_EXPORTER_VERSION
# The commit that PGBOUNCER_EXPORTER_VERSION's tag pointed at when it was
reviewed. The image
# is built from this commit, not from the tag: tags on the upstream repository
are mutable and
# can be moved to different content without this file changing. Update both
together, and
# re-check the diff upstream when you do.
-PGBOUNCER_EXPORTER_COMMIT_SHA="1b1faecd80fdeb0f4d8baa0d423e8b58e4ab9aa5"
+PGBOUNCER_EXPORTER_COMMIT_SHA="9e444947e9f21df7a4e120156a1e3fa5fae26b4a"
readonly PGBOUNCER_EXPORTER_COMMIT_SHA
-AIRFLOW_PGBOUNCER_EXPORTER_VERSION="2026.04.17"
+AIRFLOW_PGBOUNCER_EXPORTER_VERSION="2026.10.13"
readonly AIRFLOW_PGBOUNCER_EXPORTER_VERSION
-EXPECTED_GO_VERSION="1.23.7"
+EXPECTED_GO_VERSION="1.27.2"
readonly EXPECTED_GO_VERSION
COMMIT_SHA=$(git rev-parse HEAD)
diff --git a/chart/dockerfiles/pgbouncer/Dockerfile
b/chart/dockerfiles/pgbouncer/Dockerfile
index faa51f2e7a7..a39d4c8c792 100644
--- a/chart/dockerfiles/pgbouncer/Dockerfile
+++ b/chart/dockerfiles/pgbouncer/Dockerfile
@@ -36,7 +36,10 @@ RUN wget --progress=dot:giga
"https://github.com/pgbouncer/pgbouncer/releases/do
&& tar -xzvf pgbouncer-$PGBOUNCER_VERSION.tar.gz
WORKDIR /pgbouncer-$PGBOUNCER_VERSION
-RUN ./configure --prefix=/usr --disable-debug && make && make install \
+# Release tarballs no longer ship prebuilt man pages, and `make install` would
need pandoc to
+# generate them. Only the binary is copied to the final image, so build and
install just that.
+RUN ./configure --prefix=/usr --disable-debug && make pgbouncer \
+ && install -m 755 pgbouncer /usr/bin/pgbouncer \
&& mkdir /etc/pgbouncer \
&& cp ./etc/pgbouncer.ini /etc/pgbouncer/ \
&& touch /etc/pgbouncer/userlist.txt \
@@ -56,7 +59,8 @@ ARG COMMIT_SHA
# We want to make sure this one includes latest security fixes.
# "Pin versions in apk add" https://github.com/hadolint/hadolint/wiki/DL3018
# hadolint ignore=DL3018
-RUN apk --no-cache add libevent libressl c-ares
+RUN apk --no-cache upgrade \
+ && apk --no-cache add libevent libssl3 libcrypto3 c-ares
COPY --from=builder /etc/pgbouncer /etc/pgbouncer
COPY --from=builder /usr/bin/pgbouncer /usr/bin/pgbouncer
diff --git a/chart/dockerfiles/pgbouncer/build_and_push.sh
b/chart/dockerfiles/pgbouncer/build_and_push.sh
index a5664fb00da..26b7f2cdb12 100755
--- a/chart/dockerfiles/pgbouncer/build_and_push.sh
+++ b/chart/dockerfiles/pgbouncer/build_and_push.sh
@@ -24,16 +24,16 @@ readonly DOCKERHUB_REPO
# Sometimes the pgbouncer tag does not reliably correspond with the version
name
# For example, it may have a `-fixed` suffix
-PGBOUNCER_TAG="pgbouncer_1_23_1-fixed"
+PGBOUNCER_TAG="pgbouncer_1_25_2"
readonly PGBOUNCER_TAG
-PGBOUNCER_VERSION="1.23.1"
+PGBOUNCER_VERSION="1.25.2"
readonly PGBOUNCER_VERSION
-PGBOUNCER_SHA256="1963b497231d9a560a62d266e4a2eae6881ab401853d93e5d292c3740eec5084"
+PGBOUNCER_SHA256="924ad35113fd0a71c8e2dbe85b5d03445532e2b7b37a9f8a48983beea238b332"
readonly PGBOUNCER_SHA256
-AIRFLOW_PGBOUNCER_VERSION="2026.04.17"
+AIRFLOW_PGBOUNCER_VERSION="2026.10.13"
readonly AIRFLOW_PGBOUNCER_VERSION
COMMIT_SHA=$(git rev-parse HEAD)
diff --git a/chart/newsfragments/74647.significant.rst
b/chart/newsfragments/74647.significant.rst
new file mode 100644
index 00000000000..7b6ba42952f
--- /dev/null
+++ b/chart/newsfragments/74647.significant.rst
@@ -0,0 +1,19 @@
+Default PgBouncer image updated to PgBouncer 1.25.2 and PgBouncer exporter
image to 0.21.0
+
+The default PgBouncer image is now ``airflow-pgbouncer-2026.10.13-1.25.2``,
previously it was
+``airflow-pgbouncer-2026.04.17-1.23.1``. It fixes CVE-2026-6664,
CVE-2026-6665, CVE-2026-6666 and
+CVE-2026-6667. The default PgBouncer exporter image is now
``airflow-pgbouncer-exporter-2026.10.13-0.21.0``,
+previously it was ``airflow-pgbouncer-exporter-2026.04.17-0.18.0``, built with
Go 1.27.2. Exporter
+0.21.0 is required to scrape PgBouncer 1.24 and later; its metric names are
unchanged.
+
+PgBouncer 1.24 and 1.25 change some behaviour:
+
+* Prepared statement support is enabled by default (``max_prepared_statements
= 200``).
+* ``default_pool_size = 0`` now means an unlimited pool size.
+* The default ``server_check_query`` is now empty instead of ``select 1``.
+* ``reserve_pool`` is renamed to ``reserve_pool_size``. The old name remains
an alias.
+* ``KILL_CLIENT`` is restricted to users listed in ``admin_users``
(CVE-2026-6667).
+* A custom ``auth_query`` must take the password's ``VALID UNTIL`` into
account (CVE-2025-2291).
+
+The first three are defaults, and the previous values can be restored through
``pgbouncer.extraIni``.
+The last three need no action: the old name still works, and the two security
fixes cannot be turned off.
diff --git a/chart/values.schema.json b/chart/values.schema.json
index 49251ffa3d2..9e5b1782b1e 100644
--- a/chart/values.schema.json
+++ b/chart/values.schema.json
@@ -927,7 +927,7 @@
"tag": {
"description": "The PgBouncer image tag.",
"type": "string",
- "default": "airflow-pgbouncer-2026.04.17-1.23.1"
+ "default": "airflow-pgbouncer-2026.10.13-1.25.2"
},
"pullPolicy": {
"description": "The PgBouncer image pull policy.",
@@ -954,7 +954,7 @@
"tag": {
"description": "The PgBouncer exporter image tag.",
"type": "string",
- "default":
"airflow-pgbouncer-exporter-2026.04.17-0.18.0"
+ "default":
"airflow-pgbouncer-exporter-2026.10.13-0.21.0"
},
"pullPolicy": {
"description": "The PgBouncer exporter image pull
policy.",
diff --git a/chart/values.yaml b/chart/values.yaml
index 3edbbf55c58..6f301412cdf 100644
--- a/chart/values.yaml
+++ b/chart/values.yaml
@@ -113,11 +113,11 @@ images:
pullPolicy: IfNotPresent
pgbouncer:
repository: apache/airflow
- tag: airflow-pgbouncer-2026.04.17-1.23.1
+ tag: airflow-pgbouncer-2026.10.13-1.25.2
pullPolicy: IfNotPresent
pgbouncerExporter:
repository: apache/airflow
- tag: airflow-pgbouncer-exporter-2026.04.17-0.18.0
+ tag: airflow-pgbouncer-exporter-2026.10.13-0.21.0
pullPolicy: IfNotPresent
gitSync:
repository: registry.k8s.io/git-sync/git-sync