Allow puma 7.2.x in the service bundler group - #11228
Conversation
d38a566 to
d2d53e5
Compare
d2d53e5 to
c60f225
Compare
|
The Evidence: identical commits passed the full JavaScript workflow at 22:55 UTC (raise-puma-constraint, docs) and only started failing in the 23:35-23:51 UTC window. The PR changes a Ruby bundler constraint and an asciidoc file respectively - neither touches the frontend. Happy to re-trigger after the flake window; a re-run from a maintainer would also do it. |
|
CI status summary - none of the three failure families touch this PR's changes:
A re-run after the midnight UTC window would likely go green; happy to re-push or leave it to the maintainers. |
c60f225 to
1e8a8ba
Compare
|
Update: re-triggered after midnight UTC (00:56) - now the mirror test fails: Identical content passed fully at 22:55 UTC. We will re-trigger once more in the morning UTC, away from any boundary; a maintainer re-run is equally welcome. |
1e8a8ba to
00138f7
Compare
|
Thanks for the contribution @log0u7. I have two questions for you:
|
|
Thanks for the review @ehelms! Answers to both questions: 1. Puma 7 renamed the hook but kept The dynflow worker initialization in 2. Why not puma 8? I deliberately scoped this PR to the smallest change that unblocks the CVEs: the first patched release above the currently-allowed 6.6.1 is 7.2.1, and the 7.x series keeps the deprecated hooks Foreman's config relies on. Going straight to 8.0.2 would work today (the alias still exists in 8.0.2) but locks the constraint below a major version that will eventually drop the alias, and gives maintainers less room to land a proper |
|
I appreciate aiming for smallest diff possible. I will also point out the two CVEs in question, Foreman is not vulnerable to as they require setting If we are going to take the time to upgrade Puma (which we should), then we should address the deprecations rather than leaving them hanging around to find later. I would feel different about this if we were leaving the lower bound of Puma but raising the upper bound. Did you consider that idea? Raising the upper bound but keeping the lower bound to allow a smoother update to packaging? |
00138f7 to
1298417
Compare
|
Fair point on reachability: stock Foreman does not arm PROXY protocol parsing - One nuance worth recording though: CVE-2026-47737's keep-alive re-parse means the spoofing surface appears as soon as any deployment puts Puma behind a Agreed on |
puma >= 5.5 and < 7.2.1 is affected by the PROXY protocol v1 vulnerabilities CVE-2026-47736 and CVE-2026-47737 (crafted PROXY protocol headers can cause request injection on keep-alive connections and unauthenticated memory exhaustion when PROXY protocol v1 parsing is armed). The first patched release above 6.6.1 is 7.2.1, so the previous '< 7' ceiling kept every affected version in the allowed range and left no resolver path to the fixes. Raise the ceiling to '< 9' while keeping the '>= 5.1' lower bound, so packaging (RPMs ship puma 6.6.1 today) can advance on its own schedule while source builds resolve to the patched releases. Reachability note (from the PR discussion): stock Foreman never arms PROXY protocol parsing - remote_address defaults to :socket and set_remote_address 'proxy_protocol: :v1' is not configured - so neither CVE applies to the default deployment. The raise is still worthwhile: CVE-2026-47737 becomes reachable the moment any deployment puts Puma behind a send-proxy upstream (HAProxy/K8s ingress setups), as the keep-alive re-parse lets a second PROXY header rewrite remote_addr and defeat IP-based allowlists and rate limiting. Verified against Foreman 5.0.0-rc2 sources: with puma 7.2.1 the application boots, migrates, seeds and serves (users/login 200, /api/v2/ping 200); config/puma/production.rb's on_worker_boot still runs through the deprecated alias that puma 7 and 8 keep.
1298417 to
c07ec76
Compare
|
CI status on the The trace shows the action planned is Note this Katello job also failed on PR #38932 yesterday (run 34463960913, same workflow), and the previous run of this PR was fully green (36/36) on content identical except the version bounds. Happy to re-trigger. |
|
I agree it appears not to have anything to do with this change. I opened a PR with an attempted fix. |
Problem
puma >= 5.5 and < 7.2.1 is affected by the PROXY protocol v1 vulnerabilities CVE-2026-47736 and CVE-2026-47737 (crafted PROXY protocol headers can cause request injection on keep-alive connections and DoS). The current constraint
>= 5.1, '< 7'keeps every affected release in the allowed range and blocks the fixed ones (the first patched release above 6.6.1 is 7.2.1).Fix
Raise the constraint in
bundler.d/service.rbto>= 7.2.1', '< 8'.Verification
Verified against Foreman 5.0.0-rc2 sources on a CentOS Stream 10 container with puma 7.2.1 and nokogiri 1.19.4: the application boots, migrates, seeds, and serves -
users/loginreturns 200 and/api/v2/pingreturns 200. The full source-built image is exercised continuously in our CI (built, smoke-tested and scanned on every commit).Note:
concurrent-rubycannot follow in the same move: dynflow pins~> 1.1.3and concurrent-ruby-edge~> 0.6.0(see the companion issue on Dynflow/dynflow proposing that relaxation).