CHEF-37625 - Add concurrent-ruby >= 1.3.8 floor across chef-server-ctl, oc-id, oc-chef-pedant, oc_bifrost-pedant Gemfiles - #4231
Open
lbakerchef wants to merge 2 commits into
Open
CHEF-37625 - Add concurrent-ruby >= 1.3.8 floor across chef-server-ctl, oc-id, oc-chef-pedant, oc_bifrost-pedant Gemfiles#4231lbakerchef wants to merge 2 commits into
lbakerchef wants to merge 2 commits into
Conversation
lbakerchef
force-pushed
the
CHEF-37625/lbaker
branch
3 times, most recently
from
August 18, 2026 14:22
21181f3 to
1a09f74
Compare
Add an explicit concurrent-ruby version floor to src/chef-server-ctl/Gemfile. concurrent-ruby is a real (transitive, via chef/knife/berkshelf) dependency, currently resolving to 1.3.8 -- already above the floor, so this adds an explicit safety net rather than changing the resolved version. Three CVEs affect versions below 1.3.7 (GHSA-6wx8-w4f5-wwcr, GHSA-h8w8-99g7-qmvj [high], GHSA-wv3x-4vxv-whpp; Dependabot alerts 377, 380, 383), all agreeing on the same minimum patched version. Declared as a bare floor rather than routed through omnibus-config's safe_versions.rb/resolve_safe_version.call (unlike rack/rexml above): that mechanism exists to keep a cleanup-recipe threshold (ruby_gems_cleanup.rb) and a Gemfile floor from drifting apart for the same gem -- it is not a generic place to declare any gem's minimum version. CHEF-37625 is scoped only to Dependabot's Gemfile.lock scanning, which this floor alone fully and permanently resolves; there is no ticket or on-disk test/scan finding establishing a cleanup need for concurrent-ruby, so there is no second consumer for safe_versions.rb to keep in sync with this floor. See the companion documentation added to chef-server-omnibus-config's safe_versions.rb (same ticket) for the fuller explanation of when a constant belongs there vs. a bare Gemfile floor like this one. CHEF-37625 Signed-off-by: Lincoln Baker <51833247+lbakerchef@users.noreply.github.com>
…dant, oc-id, oc_bifrost pedant Signed-off-by: Lincoln Baker <51833247+lbakerchef@users.noreply.github.com>
lbakerchef
force-pushed
the
CHEF-37625/lbaker
branch
from
August 21, 2026 20:38
1a09f74 to
c4e2b40
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
NOTE
The oc-id verify failure is fixed here:
https://progresssoftware.atlassian.net/browse/CHEF-37669
Summary
Adds an explicit
concurrent-rubyversion floor (>= 1.3.8) directly to four Gemfiles:src/chef-server-ctl/Gemfile,src/oc-id/Gemfile,oc-chef-pedant/Gemfile, andsrc/oc_bifrost/oc-bifrost-pedant/Gemfile. concurrent-ruby is a real (transitive, via chef/knife/berkshelf) dependency in all four.Scope grew from the original single-file /
>= 1.3.7plan (see first commit below) once investigation found the other three apps carry their own, separately-numbered Dependabot alerts for the same three CVEs in their own independent dependency graphs — all four are fixed together here.>= 1.3.8(rather than the ticket's literal1.3.7ask) was chosen so all four Gemfiles land on one consistent value.Declared as a bare floor rather than routed through the
SafeVersions/resolve_safe_version.callmechanism (unlike rack/rexml directly above it inchef-server-ctl's Gemfile): that mechanism exists to keep a cleanup-recipe threshold (ruby_gems_cleanup.rb, inchef-server-omnibus-config) and a Gemfile floor from drifting apart for the same gem. concurrent-ruby has no on-disk cleanup consumer (no ticket or test/scan finding has established that need — live-VM testing confirmed a cleanup entry would actually break the embedded Chef Infra Client's own hard-pinned binstub, since the two share a gem root with no server/client separation), so there's no second consumer for that mechanism to keep in sync — see the companionchef-server-omnibus-configPR (documentation-only, same ticket) for the fuller rationale.oc_bifrost-pedant's Gemfile has noSafeVersionsindirection at all (it isn't wired into any omnibus software definition), so a bare floor is its only option regardless.Jira
https://progresssoftware.atlassian.net/browse/CHEF-37625
CVEs closed
GHSA-6wx8-w4f5-wwcr, GHSA-h8w8-99g7-qmvj (high), GHSA-wv3x-4vxv-whpp — flagged independently per app: chef-server-ctl (Dependabot alerts 377, 380, 383), oc-id (376, 379, 382), oc-chef-pedant (375, 378, 381), oc_bifrost-pedant (372, 373, 374).
Stacked branch note
This PR was originally stacked on top of
CHEF-33469/lbaker(#4227, CHEF-35182 — the net-imap fix). #4227 has since merged (2026-08-19), so this PR's diff now reflects only this ticket's own 2 commits:7135543— the original>= 1.3.7, chef-server-ctl-only floor.c4e2b400d— expanded scope to>= 1.3.8across all four Gemfiles (see Summary above for why).Testing
ruby:3.1.3, bundler 2.3.27): confirmed switching chef-server-ctl's floor fromresolve_safe_version.call-indirection to a bare Gemfile line produced a byte-identicalGemfile.lockat the time (both forms interpolated to the same>= 1.3.7requirement) — a zero-regression mechanism change, prior to the later1.3.8version bump.1.3.8with the floor active in all 3 shippable Gemfile.locks (chef-server-ctl, oc-id, oc-chef-pedant —oc_bifrost-pedantis never packaged into the omnibus artifact), and the appbundler trampoline hard-pins exactly1.3.8for chef-server-ctl.dpkg -i+chef-server-ctl upgrade+chef-server-ctl startfrom the latest stable release (15.10.114) to this build. Confirmed the floor is actively applied during a real upgrade, not just present on a cold install: concurrent-ruby goes from1.3.7/no-floor (chef-server-ctl) and1.3.6/no-floor (oc-id, oc-chef-pedant) pre-upgrade, to1.3.8/floored everywhere post-upgrade. Also confirmed theruby_gems_cleanuprecipe run during the upgrade touches onlyrexml— neverconcurrent-ruby— validating the no-cleanup-entry design decision on a real upgrade run, not just in source review.chef-server-ctlrspec suite (79/0) previously verified against the functionally-equivalent indirected version.