Repository navigation
fix(deps): pick up the CVE-2026-111497 Brotli fix and clear the Studio and SDK audits - #2507
Merged
Merged
Conversation
fast-uri 3.1.8, pulled in through ajv by the SDK and the Studio BFF, matches GHSA-w74x-v6f9-j3xg, GHSA-wjr9-j795-jxcr, GHSA-xhq7-xmqj-769h, and GHSA-333x-w4r6-6crp, all fixed in 3.1.9. `pnpm audit --prod` failed `task studio:audit` on every PR touching apps/. Only the lockfile entries change; ajv's range already admits 3.1.9. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Studio's full `pnpm audit` (dev dependencies included, which the CI gate does not cover) flagged undici 8.11.0 through jsdom, source-map-js 1.2.1 through css-tree, and zod 4.6.5 through @tanstack/router-plugin. Move them to undici 8.12.3, source-map-js 1.2.2, and zod 4.6.7 within their existing ranges; no package.json changes. js-yaml 4.2.0 (exact pin in @hey-api/json-schema-ref-parser 1.4.4) and happy-dom 20.x (fix only in 21.0.4) stay for a follow-up. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Google Brotli's decoder 1.0.3-1.2.0 can write out of bounds on a crafted stream; Node, Bun, and libbrotli consumers decode `br` bodies in both directions. - Studio and slack-bot runtime images: Chainguard node digests built 2026-10-23 (Node 26.12.1, libbrotlidec 1.2.1) replace the 2026-10-17 digests (Node 26.12.0, libbrotlidec 1.2.0-r6). The slack-bot builder moves to the matching latest-dev digest. - CI and SDK release: Bun 1.4.2 -> 1.4.4, which bundles Brotli 1.2.1. - SDK release: build Node 24.7.0 -> 24.22.1; publish Node 24.18.1 -> 24.22.1, whose bundled npm 11.19.1 still clears npm stage's 11.15.0 floor. The workflow tests pin the new exact versions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The slack-bot image ships @slack/bolt's express closure. Move proxy-addr 2.0.7 -> 2.0.8 (GHSA-jqcg-44mw-7w3h, critical) and body-parser 2.3.0 -> 2.4.0 (GHSA-27r3-jxmh-p828, high) within express's existing ranges; no package.json changes. undici 7.29.0, resolved as @slack/bolt's auto-installed peer, and the vitest 4.1.11 dev closure still need manifest changes and stay for a follow-up. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Merged
2 tasks
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.
Summary
Picks up the fix for CVE-2026-111497 (Google Brotli decoder 1.0.3–1.2.0, out-of-bounds write on a crafted
brstream) everywhere it can be fixed inside this repository, and unblockstask studio:audit, which currently fails on every PR touchingapps/.The audit failure and the Brotli CVE are separate problems.
pnpm auditonly sees npm packages, so it cannot see Brotli in the Node runtime or libbrotli in the image. The audit went red on its own: the four fast-uri advisories were published on 2026-10-23 between 21:36 and 21:41 UTC. Runningpnpm auditon main's unchanged lockfiles now reports 4 vulnerabilities in bothapps/andsdk/typescript/. Main's own pushes skip the Studio job whenapps/is untouched, so only PRs show it.Four commits:
fix(deps): update fast-uri to 3.1.9. fast-uri 3.1.8 reaches the SDK and the Studio BFF throughajv. It matches GHSA-w74x-v6f9-j3xg, GHSA-wjr9-j795-jxcr, GHSA-xhq7-xmqj-769h, and GHSA-333x-w4r6-6crp. This is why Renovate chore(deps): update node.js to 88c4f6e - autoclosed #2498 and chore(deps): update javascript dependencies #2499 are red. Only lockfile entries change.chore(studio): refresh vulnerable transitive dev dependencies. Studio's full audit (dev dependencies included, which the CI gate does not cover) also flagged undici, source-map-js, and the router plugin's zod. These move within their existing ranges, with nopackage.jsonchanges.fix(deps): pick up the Brotli decoder fix. New Chainguard Node digests for Studio and the slack-bot example, Bun 1.4.4 in CI and the SDK release, and Node 24.22.1 for the SDK release build and publish jobs.chore(slack-bot): update proxy-addr and body-parser. The published slack-bot image ships@slack/bolt's express closure: proxy-addr 2.0.8 (GHSA-jqcg-44mw-7w3h, critical) and body-parser 2.4.0 (GHSA-27r3-jxmh-p828, high), both within their existing ranges. No CI job audits the example.Before | After
apps/Dockerfile)chainguard/node@13c04f76…: Node 26.12.0, libbrotlidec 1.2.0-r6@88c4f6e6…: Node 26.12.1, libbrotlidec 1.2.1-r1@13c04f76…/latest-dev@85a6741a…: libbrotlidec 1.2.0-r6@88c4f6e6…/latest-dev@13afe2c0…: libbrotlidec 1.2.1-r1ci.yml,release-sdk-typescript.yml)studio:auditredstudio:auditandsdk:auditcleanI read every image digest's package list with
crane export; both new Chainguard digests are multi-arch indexes and ship libbrotlidec 1.2.1-r1 and Node 26.12.1 on amd64 and arm64. The Studio build stage (node:26-slim) was already on 26.12.1 on main. The npm 11.17–11.19.1 release notes do not touchnpm stage.Supersedes Renovate #2498. It also covers the slack-bot Chainguard part of #2501, but not #2501's brood-box digest (see below). Renovate's Bun bump in #2499 (1.4.3) predates the fix.
Not fixed here
build/execution-workload/Dockerfile, mecatui in.ko.yaml, microVM release). Every publishedghcr.io/stacklok/brood-box/basedigest, including today'slatest(dcc40097…, built 2026-10-21 12:08 UTC), ships libbrotlidec 1.2.0-r6 and Node 26.12.0, plus curl and python. Wolfi merged the patch at 17:56 the same day. This is the most exposed image: agents fetch arbitrary URLs from it. It needs a brood-box rebuild first, then a digest bump here. Until then, the microVM release, which resolvesbrood-box/base:latestat release time, would ship the vulnerable base.@hey-api/json-schema-ref-parser1.4.4, the latest release, pins it exactly. Fixing it would need a pnpm override.@slack/bolt5.0.0's auto-installed^7.0.0peer, reached through Socket Mode. The importer resolution stays locked even when@slack/socket-modeupdates. Fixing it needs a manifest change: declareundiciexplicitly or move to@slack/bolt5.1.0.package.json.node-version: '22.x'/'24.x'jobs pick up 22.23.4/24.22.1 once runner tool caches refresh. The22.14.0value in the publish job is a floor assertion, not a pin.Not affected: no Go module depends on Brotli, and
net/httpdecodes only gzip. The distroless Go images have no libbrotli. There are no Python manifests, no Envoy or Istio, and no npm Brotli packages.Verification
Passing:
pnpm audit --prodinapps/(studio:audit) andpnpm auditinsdk/typescript/(sdk:audit) report no known vulnerabilities. On main, both report 4.go test ./internal/adapter/server -run 'SDK|TypeScript'passes with the updated workflow pins..github/scripts/relevant-changes_test.shpasses.go run ./cmd/mecademoshows the tool call, the permission ask and approval, and the result.tsc --noEmit, and biome pass.Failing, all in code this PR does not touch (
git diff origin/main --name-only -- environment/ cmd/is empty):bridge.test.tswithmecated exited before readiness (-2). Nobin/mecatedwas built in the worktree. The same 11 fail with main's lockfile.task lint: 1 issue,environment/microvm/launch_ownership_darwin.go:754:22: G703(gosec). The file is darwin-only, so the Linux CI lint never sees it.task test:race(complete; no data races reported): on this macOS host,environment/microvm,environment/microvm/gitexec,cmd/mecated,cmd/mecatui,deploy/mecatl-execution-kind,internal/adapter/forker,internal/app,internal/executionexecutor, andinternal/adapter/serverfail. The failures are host-environment problems: microVM and kind,/varvs/private/varcanonicalisation, and placement cwd. Ininternal/adapter/serveronlyplacement_composition_test.gofails (cwd does not match the configured session placement), and those tests fail the same way onorigin/main. The two SDK workflow tests this PR edits pass.🤖 Generated with Claude Code