Skip to content

fix(server): server preview browser rejects the compromised eMudhra intermediates - #24542

Merged
juliusmarminge merged 1 commit into
mainfrom
fix/server-browser-emudhra
Oct 24, 2026
Merged

juliusmarminge merged 1 commit into
mainfrom
fix/server-browser-emudhra

Conversation

@juliusmarminge

Copy link
Copy Markdown
Member

The server preview browser, chrome-headless-shell 154.0.8037.92, still trusts certificates from the compromised eMudhra intermediate CAs. Chrome blocks those keys through CRLSet, but chrome-headless-shell never loads a CRLSet. Electron 44.9.3 fixed the desktop app's own views in #22645, but that did nothing for the server browser.

Chromium has since added the eight keys to its compiled-in SPKI blocklist (crrev.com/c/8618876), which every chrome-headless-shell build carries. This PR pins 156.0.8078.70, the first M156 build with that change (crrev.com/c/8627687). The current Chrome for Testing stable, 156.0.8078.47, predates it. After upgrading, a server downloads the new browser the first time a preview tab opens.

156.0.8078.70 is in the Chrome for Testing bucket for all six platforms but is not yet listed in known-good-versions-with-downloads.json. Google has not yet promoted it to the Chrome Stable channel. Every zip matched the bucket's stored length and MD5 before I took its SHA-256.

Proof

No offline regression test is possible here. A chain that hits the blocklist needs one of the compromised CA keys. The proof is a runtime transcript through T3's own PreviewBrowser install and ServerBrowserContexts launch, using a persistent profile, against the disclosure site's test hosts.

Before (154.0.8037.92):

LOADED   https://dv-g3b-emudhra.we-have-a-problem.com/  "Your client successfully connected to the site. That's bad!"
LOADED   https://dv-g3c-emudhra.we-have-a-problem.com/  "Your client successfully connected to the site. That's bad!"
LOADED   https://ov-g3b-emudhra.we-have-a-problem.com/  "Your client successfully connected to the site. That's bad!"
LOADED   https://ov-g3c-emudhra.we-have-a-problem.com/  "Your client successfully connected to the site. That's bad!"
LOADED   https://ev-g3b-emudhra.we-have-a-problem.com/  "Your client successfully connected to the site. That's bad!"
LOADED   https://ev-g3c-emudhra.we-have-a-problem.com/  "Your client successfully connected to the site. That's bad!"
LOADED   https://dv-g3b-noct-emudhra.we-have-a-problem.com/  "Your client successfully connected to the site. That's bad!"
BLOCKED  https://*-aaa-emudhra.we-have-a-problem.com/ (7 hosts)  net::ERR_CERT_AUTHORITY_INVALID
LOADED   https://example.com/

After (156.0.8078.70, fresh T3 home, so this run also exercised the pinned linux64 download, size check and SHA-256 check):

BLOCKED  https://dv-g3b-emudhra.we-have-a-problem.com/  net::ERR_CERT_REVOKED
BLOCKED  https://dv-g3c-emudhra.we-have-a-problem.com/  net::ERR_CERT_REVOKED
BLOCKED  https://ov-g3b-emudhra.we-have-a-problem.com/  net::ERR_CERT_REVOKED
BLOCKED  https://ov-g3c-emudhra.we-have-a-problem.com/  net::ERR_CERT_REVOKED
BLOCKED  https://ev-g3b-emudhra.we-have-a-problem.com/  net::ERR_CERT_REVOKED
BLOCKED  https://ev-g3c-emudhra.we-have-a-problem.com/  net::ERR_CERT_REVOKED
BLOCKED  https://dv-g3b-noct-emudhra.we-have-a-problem.com/  net::ERR_CERT_REVOKED
BLOCKED  https://*-aaa-emudhra.we-have-a-problem.com/ (7 hosts)  net::ERR_CERT_AUTHORITY_INVALID
LOADED   https://example.com/

The ServerBrowser tests use a mock Chromium, so CI never runs the real browser. To cover the two-major jump, I sent every CDP method the server preview uses through Playwright 1.60.0 to both builds: screencast and frame acks, mouse and key input, Input.insertText, Fetch interception (continue, fulfill, fail), isolated worlds, screenshots, user-agent and metrics overrides, and cache and cookie clearing. Both builds accepted every call with identical results.

vp run check:changed passes.

Only linux64 was run end to end. The other five platforms' bytes and hashes come from the bucket downloads, which the installer checks on first use.

🤖 Generated with Claude Code (Claude Opus 5.5)

…ntermediates

chrome-headless-shell never loads Chrome's CRLSet, so the CRLSet block for
the eight compromised eMudhra intermediate keys never reached it. Pin
156.0.8078.70, the first M156 build with those keys in Chromium's
compiled-in SPKI blocklist (crrev.com/c/8627687).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:M 30-99 changed lines (additions + deletions). labels Oct 24, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 24, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Needs Human Approval

Macroscope's review found this PR requires human approval — The server’s default headless Chrome release and integrity pins are being changed, causing new preview-browser installations to fetch and execute a different production binary. The change also alters certificate-trust behavior for compromised intermediates, making human review appropriate.

You can add or adjust custom eligibility rules. Learn more.

@juliusmarminge
juliusmarminge enabled auto-merge (squash) October 24, 2026 21:00
@juliusmarminge
juliusmarminge merged commit 3afb9b3 into main Oct 24, 2026
28 of 29 checks passed
@juliusmarminge
juliusmarminge deleted the fix/server-browser-emudhra branch October 24, 2026 21:01
@github-actions

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 5.0 KiB 5.0 KiB 0 B (0.0%) 6.8 KiB ✅
Codex Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Codex Live turn WebSocket wire 1.2 KiB 1.2 KiB 0 B (0.0%) 2.0 KiB ✅
Codex Live turn WebSocket decoded 20.9 KiB 20.9 KiB 0 B (0.0%) 29.3 KiB ✅
Codex Live turn messages 2 2 0 (0.0%) 8 ✅
Claude Total thread wire 5.0 KiB 5.0 KiB +31 B (+0.6%) 6.8 KiB ✅
Claude Thread snapshot wire 3.8 KiB 3.8 KiB 0 B (0.0%) 4.9 KiB ✅
Claude Live turn WebSocket wire 1.2 KiB 1.2 KiB +31 B (+2.6%) 2.0 KiB ✅
Claude Live turn WebSocket decoded 21.2 KiB 21.2 KiB +41 B (+0.2%) 29.3 KiB ✅
Claude Live turn messages 1 2 +1 (+100.0%) 8 ✅

Baseline: be1d066 · PR result: 590a023 · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 108.5 KiB
  • Claude decoded thread snapshot: 108.8 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

github-actions Bot added a commit to omarcresp/t3code-flake that referenced this pull request Oct 24, 2026
## What's Changed
* fix(server): migrate-dev-db no longer trips over webhook tables by @juliusmarminge in pingdotgg/t3code#24404
* fix(clients): GitCafe links show GitCafe's mark on mobile by @juliusmarminge in pingdotgg/t3code#24405
* feat: compactions T3 Code starts read as one working row, and stay quiet by @juliusmarminge in pingdotgg/t3code#24334
* fix(source-control): GitCafe checks show each check's newest run by @juliusmarminge in pingdotgg/t3code#24406
* fix(html): honor preview light and dark mode by @Bil0000 in pingdotgg/t3code#24521
* chore(mobile): move Enriched Markdown to upstream's block renderers by @juliusmarminge in pingdotgg/t3code#24534
* fix(provider-cursor): finished Cursor turns no longer end in Provider error after the SDK's late resume by @shivamhwp in pingdotgg/t3code#24231
* fix(server): server preview browser rejects the compromised eMudhra intermediates by @juliusmarminge in pingdotgg/t3code#24542
* chore(review): Macroscope skips generated code and recorded fixtures by @juliusmarminge in pingdotgg/t3code#24548
* fix(server): align delegated review follow-up guidance by @juliusmarminge in pingdotgg/t3code#24560
* fix(server): websocket tickets name the route they open by @juliusmarminge in pingdotgg/t3code#24554


**Full Changelog**: pingdotgg/t3code@v0.1.3-nightly.20261024.3630...v0.1.3-nightly.20261024.3643

Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.1.3-nightly.20261024.3643
Pipyakas pushed a commit to Pipyakas/t3code that referenced this pull request Oct 25, 2026
…ntermediates (pingdotgg#24542)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 3afb9b3)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:M 30-99 changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant