diff --git a/BROWSER.md b/BROWSER.md index 08c92c866..dd5ad636a 100644 --- a/BROWSER.md +++ b/BROWSER.md @@ -1305,11 +1305,12 @@ the CRLSet revocation updates Chrome pushes to running browsers. Headed mode and first pages they open, including the page `handoff` reopens, are checked against the compiled root store alone. `BROWSE_EXTENSIONS_DIR` makes the headless browser launch like headed mode. `GSTACK_CHROMIUM_PATH` replaces the -bundled build for headless and headed launches, so their trust is whatever that -binary trusts, but `handoff` always reopens in the bundled build. The bundled +bundled build for headless and headed launches, but `handoff` always reopens in +the bundled build, and the headless launch still gets no CRLSet, so pointing it +at a current Chrome only helps if that build itself drops the root. The bundled build does not enforce Certificate Transparency. That matters most for the commands that put real sessions and credentials into the browser: -`cookie-import-browser`, `cookie-import`, `cookie`, `header`, +`cookie-import-browser`, `cookie-import`, `cookie`, `header`, `state load`, `fill`/`type` and `handoff`, and a paired agent using `fill`/`type`. Aside uses your own browser's trust store and updates. @@ -1324,10 +1325,11 @@ still trust them, so "That's bad!" instead of failing with `ERR_CERT_AUTHORITY_INVALID` (headed mode fails it with `ERR_CERT_REVOKED` once its CRLSet arrives). gstack will move to the first Playwright release whose Chromium carries the removal. Until then, -don't do signed-in work in this engine on a network you do not trust (cookies -imported earlier stay in the headed profile), and prefer Aside for signed-in -work where you have it. To check a build, run the same `goto` in the default -headless mode: only `ERR_CERT_AUTHORITY_INVALID` means its root store no longer +don't do signed-in work in this engine on a network you do not trust (sessions +imported earlier persist in the headed profile and in saved state), and prefer +Aside for signed-in work where you have it. To check a build, run the same +`goto` in the default headless mode with `GSTACK_CHROMIUM_PATH` and +`BROWSE_EXTENSIONS_DIR` unset: only `ERR_CERT_AUTHORITY_INVALID` means its root store no longer trusts them. `ERR_CERT_REVOKED` only shows that the session has a CRLSet, and a DNS, network or other error proves nothing. diff --git a/CHANGELOG.md b/CHANGELOG.md index 619c5f2ac..b3b69a936 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ **BROWSER.md now says that gstack's own browser still trusts the compromised eMudhra intermediates, and how to check (#3338).** Chrome blocked the eight eMudhra intermediate CAs with a CRLSet push on 2026-10-17, the day their key compromise was reported, and scheduled the removal of their root, emSign ECC Root CA - G3, from the Chrome Root Store for 2026-10-27. gstack's fallback browser gets neither in time: its default headless browser never receives CRLSet updates, headed mode and `handoff` receive them only about a minute after each launch, and the root store compiled into the bundled Chromium still trusts the root. On 2026-10-24, `$B goto https://dv-g3b-emudhra.we-have-a-problem.com/` returned 200 and "That's bad!" on gstack's pinned Playwright 1.62.1 (Chromium 151.0.7922.34). The same check against Playwright 1.64.1 (Chromium 156.0.8078.4) and the 1.65.0 alpha of 2026-10-24 (Chromium 157.0.8103.15) also loaded the page. Chrome for Testing builds from 158.0.8115.0 fail it with `ERR_CERT_AUTHORITY_INVALID`, so a Playwright bump has to wait for a release that bundles one of those builds. ### Changed -- **`BROWSER.md`**: a new "TLS trust: the bundled Chromium's root store" section, at the end of the security stack, says the fallback engine checks certificates against that compiled root store, that the headless browser never gets CRLSet updates while headed mode and `handoff` get them about a minute after launch, and that the bundled build does not enforce Certificate Transparency. It names the commands that put real sessions and credentials into the browser (`cookie-import-browser`, `cookie-import`, `cookie`, `header`, `fill`/`type`, `handoff`, and a paired agent using `fill`/`type`), says how `BROWSE_EXTENSIONS_DIR` and `GSTACK_CHROMIUM_PATH` change the picture (`handoff` always uses the bundled build), and gives the one-line `$B goto` check: run in headless mode, only `ERR_CERT_AUTHORITY_INVALID` means a build is fixed. The table of contents, the fallback-engine introduction and the `cookie-import-browser` and `handoff` command rows link to it. Aside is unaffected, because it is your own browser with its own updates. +- **`BROWSER.md`**: a new "TLS trust: the bundled Chromium's root store" section, at the end of the security stack, says the fallback engine checks certificates against that compiled root store, that the headless browser never gets CRLSet updates while headed mode and `handoff` get them about a minute after launch, and that the bundled build does not enforce Certificate Transparency. It names the commands that put real sessions and credentials into the browser (`cookie-import-browser`, `cookie-import`, `cookie`, `header`, `state load`, `fill`/`type`, `handoff`, and a paired agent using `fill`/`type`), says how `BROWSE_EXTENSIONS_DIR` and `GSTACK_CHROMIUM_PATH` change the picture (`handoff` always uses the bundled build, and a current Chrome only helps if it drops the root), and gives the one-line `$B goto` check: run in headless mode, only `ERR_CERT_AUTHORITY_INVALID` means a build is fixed. The table of contents, the fallback-engine introduction and the `cookie-import-browser` and `handoff` command rows link to it. Aside is unaffected, because it is your own browser with its own updates. ### For contributors - The edits above the cookie workflow excerpt change no line count, so the `setup-browser-cookies/SKILL.md workflow` judge input is byte-identical (prompt SHA-256 `c851e635…`, 12,805 bytes, before and after).