Repository navigation
fix: patch the Brotli decoder for CVE-2026-111497 - #24
Conversation
🟢 Tier S · Ready to mergeThe Docker image updates Bun, Chromium, and Debian's Brotli package, and adds a build-time check for the fixed Debian decoder version. The e2e full-page screenshot test now compares PNG dimensions using a Brotli-related page, while the egress integration setup allows more time for Chrome startup. Latest changes: The latest commits switch the full-page screenshot fixture to Wikipedia and compare decoded PNG dimensions rather than compressed file sizes, and raise the egress test's browser-launch hook timeout to 30 seconds.
📂 Walkthrough · 3
🔇 Filtered out · 1Findings Hansi considered but did not post.
Reviewed the commits since |
Docker Image Stats
Screenshot benchmark: Average of 3 runs on https://appwrite.io |
The full-page test compared PNG byte sizes on an external site that can serve CI a short page; it now compares captured heights on a long document. The egress suite's beforeAll launches the runner's Chrome, which can exceed bun's 5s hook timeout.
Patches the Brotli decoder out-of-bounds write (CVE-2026-111497) in every copy of Brotli the image carries. This service loads pages from URLs users supply, so any
brresponse it decodes comes from an untrusted server.oven/bun:1.3.21.4.4, the patched line; 1.3 gets no fixlibbrotli11.1.0-2+b7(vulnerable)1.1.0-2+deb13u1(DSA-6582-1)chromedp/headless-shell)143.0.7445.3157.0.8103.15, current stableThe Dockerfile now also fails the build if
libbrotli1is older than1.1.0-2+deb13u1, so a stale base image can't bring the vulnerable decoder back.There's no Chrome advisory for this CVE yet. Chromium vendors its own Brotli, so moving to current stable is the best available step, and it also brings 14 major versions of Chrome security fixes.
Tested locally
Test fixes
main's test workflow has failed on its last three runs. b17e41e fixes the two causes:beforeAlllaunches the runner's Chrome, which can take longer than bun's 5s default hook timeout. It now gets 30s.should capture full page screenshotcompared PNG byte sizes onitznotabug.dev. In CI that site served a short page, so both captures came out about 18 KB. The test now checks the captured height (720 for the viewport, more for the full page) on a long document. It passes locally against the patched image, and 0.3.8 behaves the same on both sites, so Chrome 157 changed nothing here.