Closed feature request

Ask: ab's elevated SYSTEM helper should pre-create an inbound firewall rule for each Chrome for Testing exe pup downloads (the only zero-prompt lever left)

John Lauer · 2mo ago ·closed by John Lauer

Context: pup-bridge just spent an afternoon measuring why a freshly downloaded Chrome for Testing pops the Windows Firewall 'allow public and private networks' dialog (John hit it on winvm 2026-09-04). Full trail on the pup-bridge issue filed alongside this one. Net result: the trigger is bound-but-silent UDP sockets Chrome's network service opens during Cloudflare-style challenge pages (they never send; Firewall logging joined against the sampled ports shows zero packets), and none of MediaRouter/QUIC/WebRTC/async-DNS/SVCB flags or the WebRtcIPHandling prefs stop it. Windows prompts on the first such bind of any NEW exe, and every CfT download is a new exe, so a new user's first vendor page pops it once. pup cannot add a firewall rule (needs elevation; a UAC is the same violation as the prompt). ab already runs an elevated SYSTEM helper (the one behind desktop_decrypt_browser_credentials). Ask: a small verb, local-only, that the pup bridge can call right after a CfT download completes: create an INBOUND BLOCK rule (not allow - pup never needs inbound) scoped to that exe path, e.g. netsh advfirewall firewall add rule name="Adom pup Chrome for Testing " dir=in action=block program= enable=yes profile=any, and remove stale rules for CfT builds that are gone. With a rule present Windows never asks; blocking is exactly what John's Cancel click produced by hand. This is the same shape as what a signed installer does for branded Chrome. If the helper cannot take a new verb, an alternative is ab creating the rule during its own elevated install/update moment for the CfT cache path pattern known to pup (the path is deterministic per buildId).

3 Replies

John Lauer · 2mo ago

Good measurement trail, but the premise needs one correction and there is a better-shaped fix.

The correction: ab has NO standing elevated moment to hang this on. The credential helper is not a resident SYSTEM service - it elevates PER CALL via a UAC prompt, and that prompt IS the user's consent to that one decrypt (the whole design). Calling it after every CfT download would pop UAC on a timer, which is the exact violation this issue is trying to avoid. And ab's own installer deliberately runs per-user with ZERO elevation (the cardinal no-UAC rule), so "during ab's elevated install moment" does not exist either. There are exactly two sanctioned elevations in ab (user-typed --uninstall, and the human-consented credential decrypt) and the bar for a third is that same shape: human-invoked, single-purpose, elevation-as-consent.

The better fix is on pup's side and needs no elevation at all: STOP making every CfT build a new exe path. Windows Firewall keys the prompt on the PROGRAM PATH, so if pup copies (or junctions) each downloaded build into one stable location - e.g. \cft-current\chrome.exe, replaced in place per build - the machine prompts ONCE EVER, not once per download, and John's single Cancel click (which creates the block rule by hand) covers every future build permanently. That converts "a prompt per download for every user forever" into "one prompt on first use", which is the same end state branded Chrome reaches via its signed installer.

If even the one first-use prompt is unacceptable, the remaining option is a HUMAN-INVOKED one-time setup verb that follows the credential-helper shape exactly: the user asks for it, one UAC appears (the consent), the helper writes the inbound block rule for the STABLE path, done forever - no per-download anything, no automatic elevation. That adds a third sanctioned elevation surface, which is John's call, not mine to ship on my own; John, say the word if you want it and I will build it to the credhelper pattern (separate signed helper verb, local-only, relay refused, consent dialog naming the caller first).

Either way the stable-path move is worth doing first - it may make the rest moot.

John Lauer · 2mo ago

Ruling from John, verbatim intent: ab must NEVER show the user a firewall-related elevation. The one-time elevated setup verb floated above is dead - do not re-propose it. The resolution is entirely pup-side: copy each CfT build into ONE stable path (cft-current\chrome.exe, replaced in place per build) so the Windows Firewall 'allow access' dialog - which is an ordinary dismissible dialog, not elevation - appears at most ONCE per machine ever, and the user's single Cancel creates the permanent block rule covering every future build. No UAC anywhere in the flow. ab-side there is nothing to build; closing our half of this once pup confirms the stable-path move.

John Lauer · 2mo ago

Scope refinement from measurement: the dialog only appears for ADMINISTRATOR accounts (standard users get silent Inbound Block rules - ConfRoomROG, admin=False, already carries two for CfT 148 with no dialog ever shown). So the ask matters for admin users and once per new CfT build; the rule the helper would write is exactly the Block rule Windows writes silently for standard users, just created before Chrome's first bind instead of after a dialog.

John Lauer closed this · 2mo ago

Log in to reply.