Skip to content

Patch 14 security advisories with conservative lockfile bumps - #13

Merged
minerva-sky merged 1 commit into
codenamev:mainfrom
minerva-sky:security/audit-lockfile-bumps
Aug 18, 2026
Merged

Patch 14 security advisories with conservative lockfile bumps#13
minerva-sky merged 1 commit into
codenamev:mainfrom
minerva-sky:security/audit-lockfile-bumps

Conversation

@minerva-sky

Copy link
Copy Markdown
Collaborator

What

Lockfile-only security bump. bundler-audit flags 14 advisories across five gems in Gemfile.lock:

Gem Locked Bumped Advisories
faraday 2.11.0 2.14.3 SSRF via protocol-relative URLs (CVE-2026-25765 + incomplete-fix follow-up CVE-2026-33637), nested-params stack-exhaustion DoS (CVE-2026-54297)
uri 0.13.1 1.1.1 userinfo credential leakage (CVE-2025-27221) and its bypass (CVE-2025-61594)
concurrent-ruby 1.3.4 1.3.8 AtomicReference NaN livelock (CVE-2026-54904), RW-lock exclusivity bugs (CVE-2026-54905, CVE-2026-54906)
addressable 2.8.7 2.9.0 template ReDoS (CVE-2026-35611)
rexml 3.3.1 3.4.4 five DoS advisories (CVE-2024-39908CVE-2024-49761)

faraday matters most: it's ruby-openai's transport, i.e. the path every LLM call takes. uri and concurrent-ruby are runtime-transitive; addressable and rexml are dev-only (webmock/rubocop).

A sixth gem moves with no advisory behind it: faraday-multipart 1.0.4 → 1.2.0. Its 1.0.4 gemspec declares required_ruby_version < 4, so a lock holding it cannot bundle install on current stable Ruby (4.x) at all — the panel caught it riding along undisclosed, and the root cause turned out to be exactly that ceiling. 1.2.0 lifts it and keeps the Faraday::UploadIO alias that ruby-openai 7.1.0's multipart path calls (verified present in 1.2.0's source). WORLD.md: "Track the latest stable Ruby."

How

bundle lock --update addressable rexml concurrent-ruby uri faraday faraday-multipart --conservative — all six bumped in place. ruby-openai stays at 7.1.0; the gemspec is untouched and Gemfile.lock is excluded from the packaged gem, so consumers see nothing. This patches only the gem's own dev/CI resolution.

Verification

  • bundler-audit check: No vulnerabilities found (was 14)
  • bundle exec rake (610 examples + standardrb): exit 0
  • Caveat, stated plainly: local verification ran on Ruby 4.0.6 (no 3.2 interpreter on this machine). CI's 3.2.4 run is the adjudicating evidence — it's where uri 1.1.1 activates as a gem over the 0.12.x default, the largest behavioral delta here. Please treat the green Ruby 3.2.4 check, not the local run, as the merge evidence.

One review finding didn't block but is tracked: faraday ≥ 2.12 embeds the full request URL in error messages, which agentic's logger and execution journal persist verbatim — a query-string-auth exposure for custom api_base_url gateways. Filed as item 3 on #12 with a proposed sanitize-at-boundary fix.

Panel

  • DHH — cleared. "A Gemfile.lock-only conservative bump has no API surface to be un-Ruby-ish"; flagged the faraday-multipart drift and the uri major jump, judged both acceptable.
  • Obie Fernandez — objected-then-cleared. Three objections: the undisclosed faraday-multipart bump, verification on the wrong Ruby, and faraday 2.14's URL-bearing error messages hitting persistent sinks. Second pass verified the fixes claim-by-claim (forced sixth bump disclosed, CI-as-evidence stated verbatim in the commit, no failure text reaches LLM prompts, exposure tracked on Harden PersistentAgentStore path handling and capability-filter dispatch against untrusted agent configs #12): "two faraday SSRF CVEs outrank a same-trust-domain local-log refinement."
  • Vladimir Dementyev — objected-then-cleared. Two objections: the sixth bump and the 4.0.6-vs-3.2.4 evidence gap. Second pass independently confirmed faraday-multipart 1.0.4's < 4 ruby ceiling forces the move, and ran Faraday::UploadIO resolution live under 1.2.0 to close the seam VCR can't see. "Refusing to peg a shared host's CPU building a second interpreter for evidence CI produces for free is the right performance call."
  • The gem consumer — cleared. Verified Gemfile.lock is excluded from the packaged gem, gemspec constraints untouched, version.rb untouched: "the diff moves the single tested point, it doesn't change the contract surface."

bundler-audit flags five gems in the lockfile: faraday 2.11.0 (SSRF via
protocol-relative URLs CVE-2026-25765/CVE-2026-33637, nested-params DoS
CVE-2026-54297), uri 0.13.1 (credential leakage CVE-2025-27221 and its
bypass CVE-2025-61594), concurrent-ruby 1.3.4 (three lock/atomics bugs
incl. CVE-2026-54904), addressable 2.8.7 (template ReDoS CVE-2026-35611),
and rexml 3.3.1 (five DoS advisories incl. CVE-2024-49761).

Bump those five plus faraday-multipart, all in place, via
bundle lock --update addressable rexml concurrent-ruby uri faraday
faraday-multipart --conservative: faraday 2.14.3, uri 1.1.1,
concurrent-ruby 1.3.8, addressable 2.9.0, rexml 3.4.4,
faraday-multipart 1.2.0.

faraday-multipart is the one bump with no advisory behind it: 1.0.4
declares required_ruby_version < 4, so the lock cannot even install on
current stable Ruby (4.x) dev machines; 1.2.0 lifts that ceiling and
keeps the Faraday::UploadIO alias that ruby-openai 7.1.0's multipart
path calls (verified present in 1.2.0's source).

ruby-openai stays at 7.1.0; no gemspec changes, so nothing changes for
gem consumers. bundler-audit is clean and the full suite (610 examples)
plus standardrb pass on the new lock. Local verification ran on Ruby
4.0.6; the CI run on 3.2.4 is the adjudicating evidence for the uri
0.x->1.x default-parser transition on that Ruby.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@minerva-sky minerva-sky added the loop:security Security analysis loop label Aug 17, 2026
@minerva-sky
minerva-sky merged commit d91f12f into codenamev:main Aug 18, 2026
1 check passed
@minerva-sky
minerva-sky deleted the security/audit-lockfile-bumps branch August 18, 2026 21:03
minerva-sky added a commit that referenced this pull request Aug 19, 2026
MAINTAINING.md's release checklist has prescribed a bundler-audit run since
before this commit, but bundler-audit appears nowhere in the Gemfile, the
lockfile, or any workflow. The step only ever worked for a maintainer who
happened to have the gem installed globally, which is how 14 advisories
reached #13 without anything reporting them.

Adds a separate Advisories workflow: PRs and pushes that move Gemfile,
Gemfile.lock or the gemspec, plus a Monday sweep for advisories published
against a lockfile nobody touched. The scanner installs outside the bundle
so its resolution stays independent of the gem's, and .bundler-audit.yml
gives a deliberate exception somewhere reviewable.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

loop:security Security analysis loop

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants