Exciting experiment! LGTM.

Do you have plans to publish your results?

On Monday, September 15, 2025 at 9:45:35 AM UTC-7 Ari Chivukula wrote:

> Contact emails
>
> aric...@chromium.org, awil...@chromium.org, a...@google.com, 
> miketa...@chromium.org
> Explainer/Specification
>
> None
>
> Summary
>
> This experiment evaluates the impact of changing the per-profile TCP 
> socket pool size from 256 (the current default 
> <https://source.chromium.org/chromium/chromium/src/+/main:net/socket/client_socket_pool_manager.cc;drc=8b81608b6457dfef865f46e509c79dc60fe3c69b;l=35>)
>  
> to 513 while adding a per-top-level-site cap of 256 (to ensure no two tabs 
> can exhaust the pool). The feasibility of raising the per-profile limit 
> to 512 was already studied 
> <https://groups.google.com/a/chromium.org/g/blink-dev/c/1r-i4Koc5nM?e=48417069>
>  
> and did not yield negative results, and the per-top-level-site cap of 256 
> is equal to the current per-profile limit so should not cause negative 
> impact. These new limits will be imposed independently for the WebSocket 
> pool and the normal (HTTP) socket pool.
>
>
> The intent is to roll this experiment directly into a full launch if no 
> ill effects are seen. See the motivation section for more.
>
>
> Blink component
>
> Blink>Network 
> <https://issues.chromium.org/issues?q=customfield1222907:%22Blink%3ENetwork%22>
>
> TAG review
>
> https://github.com/w3ctag/design-reviews/issues/1151
>
>
> Motivation
>
> Having a fixed pool of TCP sockets available to an entire profile allows 
> attackers to effectively divinate the amount of network requests done by 
> other tabs, and learn things about them to the extent that any given site 
> can be profiled. For example, if a site does X network requests if it’s 
> logged in and Y if it’s logged out, by saturating the TCP socket pool and 
> watching movement after calling window.open, the state of the other site 
> can be gleaned. This sort of attack is outlined in more detail here: 
> https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/
>
> In order to address this sort of attack, we will cap the max sockets 
> per-top-level-site while raising the per-profile limit. That means no 
> single tab can max out the socket pool on its own. While this mitigation 
> does not fully block the attack (it could still be performed by 
> orchestrating three attacking tabs on different sites) it raises the 
> difficulty by preventing it from being performed by just one tab. 
> Widespread adoption of this attack is already made difficult as multiple 
> attackers all acting at once would step on each other and prevent pool 
> monopolization.
>
> Risks
>
> Interoperability and Compatibility
>
> While other user agents may wish to follow the results, we only anticipate 
> compatibility issues with local machines or remote servers when the 
> amount of available TCP sockets in the browser fluctuates up (256 -> 513) 
> in a way Chrome did not allow before. This will be monitored carefully, and 
> any experiment yielding significant negative impact on browsing experience 
> will be terminated early.
>
> Gecko: https://github.com/mozilla/standards-positions/issues/1299; 
> current global cap of 128-900 
> <https://github.com/mozilla-firefox/firefox/blob/4bd4e4c595499ee51c2e6f4c9f780fe720f454e8/modules/libpref/init/all.js#L1138>
>  
> (as allowed by OS)
>
> WebKit: https://github.com/WebKit/standards-positions/issues/550; current 
> global cap of 256 
> <https://github.com/WebKit/WebKit/blob/d323b2fc4cd2686c828bd8976fae6ec2d2b6311c/Source/WebCore/platform/network/soup/SoupNetworkSession.cpp#L104>
>
> Debuggability
>
> This will be gated behind the base::feature 
> kTcpConnectionPoolSizePerTopLevelSiteTrial, so if breakage is suspected 
> that flag could be turned off to detect impact. For how to control feature 
> flags, see this 
> <https://source.chromium.org/chromium/chromium/src/+/main:base/feature_list.h;drc=159a65729cf8fca4d9f453d12d97ab6515360491;l=259>
> .
>
> Measurement
>
> A new net log event type 
> SOCKET_POOL_STALLED_MAX_SOCKETS_PER_TOP_LEVEL_SITE will be added to track 
> when we hit this new limit as opposed to the existing 
> SOCKET_POOL_STALLED_MAX_SOCKETS event.
>
> An existing metric Net.TcpConnectAttempt.Latency.{Result} will be used to 
> detect increases in overall connection failure rates.
>
> Will this feature be supported on all six Blink platforms (Windows, Mac, 
> Linux, ChromeOS, Android, and Android WebView)?
>
> No, not WebView. That will have to be studied independently due to the 
> differing constraints.
>
> Is this feature fully tested by web-platform-tests?
>
> No, as this is a blink networking focused change browser tests or unit 
> tests are more likely.
>
> Flag name on about://flags
>
> None
>
> Finch feature name
>
> TcpConnectionPoolSizePerTopLevelSiteTrial
>
> Rollout plan
>
> We will never test more than 5% in each group on stable, and will stay on 
> canary/dev/beta for a while to detect issues before testing stable.
>
> Requires code in //chrome?
>
> No
>
> Tracking bug
>
> https://crbug.com/415691664
>
> Estimated milestones
>
> 142
>
> Link to entry on the Chrome Platform Status
>
> https://chromestatus.com/feature/6496757559197696
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"blink-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to blink-dev+unsubscr...@chromium.org.
To view this discussion visit 
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/5b44a370-bfd7-4a9b-9f2e-7f2b7fb74f94n%40chromium.org.

Reply via email to