Skip to content

fix(redis-ha): update HAProxy image to 3.3.14-alpine (CVE-2026-63073, CVE-2026-75803) - #424

Open
JanWelker wants to merge 1 commit into
DandyDeveloper:masterfrom
JanWelker:haproxy-3.3.14
Open

JanWelker wants to merge 1 commit into
DandyDeveloper:masterfrom
JanWelker:haproxy-3.3.14

Conversation

@JanWelker

Copy link
Copy Markdown

What this PR does / why we need it:

Updates the HAProxy image from 3.3.10-alpine to 3.3.14-alpine, which clears three critical CVEs:

Package 3.3.10-alpine 3.3.14-alpine CVE
libcrypto3 / libssl3 3.5.7-r0 3.5.8-r0 CVE-2026-63073, CVE-2026-75803
socat 1.8.1.1-r0 1.8.1.3-r0 CVE-2026-56123

3.3.14-alpine was rebuilt 2026-09-18 on Alpine 3.24; the package versions above are from the Alpine v3.24 APKINDEX. Same HAProxy 3.3 line, same Alpine base family — patch-level change only.

This follows the same shape as #405, which bumped this pin for CVE-2025-15467.

Which issue this PR fixes

Special notes for your reviewer:

README.md line 262 documented haproxy.image.tag as 3.0.8-alpine — helm-docs was not re-run after #405, so the row was two bumps behind. This PR updates it to match values.yaml. I checked the other generated tag rows (image.tag, configmapTest.image.tag, exporter.tag) and they are all in sync, so no other README churn is included.

charts/redis-ha/ci/haproxy-enabled-values.yaml exists, so ct install exercises this change on kind.

As noted in #423, this repository has no Renovate or Dependabot configuration, which is why these pins drift into CVE reports. Happy to send a config PR separately if that is something you would want.

Prepared with the help of Claude Code; package versions verified against the Alpine v3.24 APKINDEX, and reviewed before raising.

Checklist

[Place an '[x]' (no spaces) in all applicable fields. Please remove unrelated fields.]

  • DCO signed
  • Chart Version bumped
  • Variables are documented in the README.md
  • Title of the PR starts with chart name (e.g. [stable/mychartname])

@JanWelker

Copy link
Copy Markdown
Author

Correction to my own PR: there is a fourth critical in this image that I missed, and this bump most likely does not fix it.

CVE-2026-55203 is in HAProxy itself rather than a bundled library — an integer overflow in the FastCGI demux, where fconn->drl += fconn->drp wraps to 0 when contentLength=65535 and paddingLength >= 1, letting a malicious FastCGI backend desynchronise the FCGI framing parser.

I could not confirm whether the fix reached the 3.3 branch:

  • fixed in haproxy/haproxy@5985276 ("BUG/MEDIUM: mux-fcgi: fix uint16_t overflow in drl += drp", 2026-06-16), which carries no backport annotation in its commit message
  • comparing v3.4.0...5985276 reports the commit as 68 ahead / 0 behind v3.4.0, so the fix landed after 3.4.0 was tagged
  • the advisory gives the affected range as "through 3.4.0"
  • the GitHub mirror does not carry 3.3.x patch tags, so I could not check 3.3.14 directly

If someone can check against the stable 3.3 tree, that would settle it.

Two notes on how to weigh this:

Reachability. The bug is in the FastCGI multiplexer. This chart's HAProxy proxies Redis over TCP and configures no FCGI backend, so the vulnerable path should not be reachable in the default configuration.

Correction to my PR description. I listed socat CVE-2026-56123 among the three fixed. That is accurate as far as it goes, but relevancy analysis shows socat is not loaded at runtime in this image, whereas CVE-2026-55203 is in the binary that is. So the runtime-relevant effect of this PR is the two OpenSSL CVEs (four findings across libcrypto3 and libssl3), not three.

The OpenSSL bump still stands on its own and I would still suggest merging it — I just did not want to leave the impression that it clears this image's critical findings.

@JanWelker

Copy link
Copy Markdown
Author

Adding a note on who this actually fixes, since it is not only direct users of this chart.

This PR fixes the Argo CD chart. argo-cd vendors redis-ha into its published release tarball rather than resolving the dependency at install time:

$ tar xzf argo-cd-10.9.2.tgz -O argo-cd/charts/redis-ha/Chart.yaml | grep ^version
version: 4.38.0

Argo CD 10.9.2 therefore ships haproxy.image.tag: 3.3.10-alpine, and the affected HAProxy is what every Argo CD HA installation runs today. Because the subchart is vendored, Argo CD users have no way to redirect the chart source — they are downstream of whatever version this repo last released and Argo CD last vendored, with no intermediate control point.

That also means the fix does not reach them when this merges. It reaches them when this merges and a redis-ha release is cut and argo-helm bumps its dependency. Argo CD is currently a minor behind this repo's latest release (4.38.0 vendored vs 4.39.0 released), so that tail is real.

I have posted a values-level workaround on #423 for Argo CD users who need to move before then, and applied it in my own cluster (JanWelker/homelab#753) — but it only helps people who find the thread, so it does not substitute for this landing.

Happy to rebase or split the README chunk out if that makes review easier.

JanWelker added a commit to JanWelker/homelab that referenced this pull request Sep 18, 2026
* fix(argocd): pin the redis-ha HAProxy image ahead of the chart

The argo-cd chart vendors redis-ha 4.38.0 inside its release tarball, so
the subchart's haproxy pin travels with it and no repository override can
reach it. That pin is 3.3.10-alpine, which carries three critical CVEs:
CVE-2026-63073 and CVE-2026-75803 in libcrypto3/libssl3, and
CVE-2026-56123 in socat.

Overriding the tag is enough. 3.3.14-alpine is the same HAProxy 3.3 line
rebuilt on Alpine 3.24, whose APKINDEX carries the fixed packages, so this
is a patch-level change to one image and nothing else in the chart moves.

Upstream fix is DandyDeveloper/charts#424; this override comes out once
the argo-cd chart vendors redis-ha 4.39.1 or later.

* fix(argocd): let Renovate track the HAProxy tag override

The override was invisible to Renovate. The helm-values manager only
extracts an image block that carries a repository key alongside the tag:

  hasKey('repository', data) && (hasKey('tag', data) || hasKey('version', data))

This block sets only the tag, since the repository comes from the argo-cd
chart's own values, so the manager skipped it and the pin would have gone
stale exactly the way the upstream pins do.

Annotating it hands the tag to the custom manager that already tracks
inline image versions elsewhere in payload/. Restating the repository here
would also work, but would pin argo-helm's registry choice as a side
effect. versioning=docker keeps the -alpine suffix from being read as a
semver prerelease.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[redis-ha] HAProxy image 3.3.10-alpine carries 3 critical CVEs; no bot tracks the image tags

1 participant