Pool-Party: Exploiting Browser Resource Pools as Side-Channels for Web Tracking

Page created by Virginia Brewer
 
CONTINUE READING
Pool-Party: Exploiting Browser Resource Pools as
                                                    Side-Channels for Web Tracking

                                                                    Peter Snyder∗,Soroush Karami† ,Benjamin Livshits‡ , and Hamed Haddadi‡
                                                                                                    ∗ Brave  Software
                                                                                                     pes@brave.com
                                                                                           † University of Illinois at Chicago
arXiv:2112.06324v1 [cs.CR] 12 Dec 2021

                                                                                                    skaram5@uic.edu
                                                                                      ‡ Brave Software, Imperial College London

                                                                                         {b.livshits,h.haddadi}@imperial.ac.uk

                                            Abstract—We identify a new class of side-channels in browsers     execute in realistic browsing scenarios to pose a threat to Web
                                         that are not mitigated by current defenses. This class of side-      users.
                                         channels, which we call “pool-party” attacks, allow sites to
                                         create covert channels by manipulating limited-but-unpartitioned         In this work we demonstrate that current browser protec-
                                         resource pools in browsers. We identify pool-party attacks in all    tions (even those deployed by the most aggressively privacy-
                                         popular browsers, and show they are practical cross-site tracking    focused browsers) are insufficient. We demonstrate this by
                                         techniques.                                                          defining a new category of techniques for constructing side-
                                             In this paper we make the following contributions: first,        channels, by exploiting the state of limited-but-unpartitioned
                                         we describe pool-party side-channel attacks that exploit limits      resource pools in the browser. Because such side-channels are
                                         in application-layer resource pools in browsers. Second, we          exploited by two parties colluding in the same resource pool,
                                         demonstrate that pool-party attacks are practical, and can be        we call this category of side-channel “pool-party” attacks.
                                         used to track users in all popular browsers; we also share open
                                         source implementations of the attack and evaluate them through           “pool-party” attacks create side-channels out of explicit
                                         a representative web crawl. Third, we show that in Gecko based-      and intentional, browser-imposed limits on pools of resources.
                                         browsers (including the Tor Browser Bundle) pool-party attacks       When resource pools are limited (i.e., the browser will
                                         can also be used for cross-profile tracking (e.g., linking user      only allow pages to access resources up to some hard limit,
                                         behavior across normal and private browsing sessions). Last, we      after which requests for more resources will fail) and un-
                                         discuss possible mitigations and defenses.                           partitioned (i.e., different sites consume resources from the
                                                                                                              same pool), sites can consume or release those resources to
                                                               I.    I NTRODUCTION                            leak information across security boundaries. Examples of such
                                                                                                              boundaries include site-boundaries (e.g., the browser intends
                                             Browser vendors are increasingly developing and deploying        to prevent site A from communicating directly with site B) or
                                         new features to protect privacy on the Web. These new privacy        profile boundaries (e.g., the browser intends sites visited in a
                                         features address the ways users are most commonly tracked on         “standard” browsing session to not be able to learn about sites
                                         the Web: partitioning DOM storage to prevent tracking from           visited in an “incognito” browsing session). More generally,
                                         third-party state, randomization or entropy reduction to combat      sites can use these side-channels to conduct the kinds of cross-
                                         browser fingerprinting, network state partitioning to prevent        site tracking that the latest browser features were intended to
                                         cache-based tracking, etc.                                           prevent.
                                             However, research has documented other ways Web users                We identify practical “pool-party” attacks in all popular
                                         can be tracked, though in ways that may be difficult to conduct      browsers, both in each browser’s default configuration, and,
                                         under realistic browsing conditions. Significantly among these       for Chromium-browsers, also when non-standard, additional
                                         are side-channels that can be constructed through timing sig-        privacy-protecting features are enabled. We demonstrate “pool-
                                         nals. These side-channels allow sites to communicate with each       party” attacks in Chromium and Gecko based browsers through
                                         other (or, even other applications) in ways not intended by the      the limited-but-unpartitioned resource pool of WebSocket con-
                                         Web security model. Significantly, such side-channels can be         nections, and in WebKit based browsers through the Server-
                                         used to reintroduce the kinds of cross-site tracking attacks the     Sent Events resource pool. We further identify many other
                                         above-discussed browser protections were designed to prevent.        limited-but-unpartitioned resource pools in browsers that could
                                                                                                              be leveraged for “pool-party” attacks. Examples of such pools
                                             Browser vendors have responded to such side-channels in          include certain kinds of resource handle (e.g., Web Speech
                                         a variety of ways. Some side-channels (e.g., timing signals          API), or limits on how many network requests (distinct from
                                         from abusing HTTP cache state) have been largely addressed           network connections) can be in flight at once (e.g., DNS
                                         through platform wide improvements like network state parti-         resolution), among others.
                                         tioning. Other side-channels have been addressed (or, at least
                                         mitigated) though other protections, like isolating sites in their       Additionally, we demonstrate that “pool-party” attacks are
                                         own OS processes. Others still have been left unaddressed,           not just theoretical threats to user privacy, but practical threats,
                                         possibly because they seem theoretical, or too difficult to          and can be used to track users across sites. Further, we show
that in Gecko-based browsers (including the Tor Browser                               All four organizations were made aware of this submission,
Bundle), “pool-party” attacks can be used to create side-                          and were provided with pre-print versions of this paper.
channels across profiles, allowing sites to link behaviors in
“private browsing” modes with long term browser identities.
                                                                                      II.   “P OOL - PARTY ” D EFINITION AND BACKGROUND
   These findings are important for the development of
browser partitioning. All browser engines support some forms                           In this section we provide the background context for how
of partitioning: WebKit partitions DOM storage and some                            “pool-party” attacks relate to other Web tracking techniques in
kinds of network state, Gecko partitions DOM storage and                           general, and other methods of creating browser side-channels
network state, and Chromium partitions network state1 . Brave                      in particular. We also describe why existing browser protec-
has extended Chromium to also partition third-party.                               tions fail to protect users against “pool-party” attacks.

    However, despite this welcome and difficult work, all                              This section proceeds by first defining what Web tracking
browser engines include multiple limited-but-unpartitioned re-                     is, then describes how websites can track users using “pool-
source pools that can be be leveraged for “pool-party” attacks.                    party” attacks. Next, we describe how “pool-party” attacks
We intend this work to be helpful in the further development                       relate to both i) other side-channels in browsers, and ii) con-
of partitioning-based privacy protections in browsers.                             ventional Web tracking techniques. We follow by explaining
                                                                                   why existing browser protections do not protect users against
                                                                                   “pool-party” attacks, and conclude by describing how this
A. Contributions                                                                   work relates to a category of attacks previously known to be
    More formally, in this work we make the following con-                         possible, but not previously shown to be practical.
tributions:
  1) We define a new category of technique for creating                            A. Web Tracking and Cross-Site Tracking
     side-channels in browsers. We call this category of                               This section gives a “working” definition of Web tracking.
     side-channel ““pool-party” attacks”, and describe how                         Our goal in this definition is not to provide a formal, fully
     the approach differs from the kinds of privacy attacks                        unambiguous definition (the phrase “Web tracking” is used
     browsers currently aim to defend against;                                     too broadly to likely allow for such a definition), but instead
  2) We empirically evaluate how vulnerable browsers are                           to give a general, practical definition, to build on throughout
     to “pool-party” attacks, and demonstrate that all popular                     the rest of this work.
     browsers and browser engines are vulnerable to multiple
     forms of the attack;                                                              In this paper, we use the term Web tracking to refer to
  3) We provide two open-source, proof-of-concept imple-                           the practice of the browser-user being re-identified, across
     mentations of our attack that work in all browsers 2 ;                        conceptual contexts, without the user’s consent. We use the
  4) We perform a web-scale measurement to evaluate the                            word context broadly, to refer to the user executing a webpage
     availability, bandwidth, and stability of “pool-party” at-                    in such a way that the webpage is not able to link the users
     tacks, and find that “pool-party” attacks are a practical                     behavior or identity on that page, with the users behavior or
     basis carrying out cross-site tracking attacks;                               identity on other webpages.
  5) We discuss potential mitigation strategies for how
     browsers could harden themselves against “pool-party”                             Contexts might be divided by time (e.g., a site re-
     attacks.                                                                      identifying a user revisiting the same site a week after first
                                                                                   visiting, despite the user clearing browsing data), application
                                                                                   (e.g., a site re-identifying a user in visiting a site in Safari
B. Responsible Disclosure                                                          as the same user who previously visited the site in Chrome),
    We have presented our findings to the following browser                        profile (e.g., a site identifying that the visiting in an pri-
vendors (in alphabetical order): Apple, Brave, Google, Mi-                         vate/incognito browser session is the same user visiting the
crosoft, Mozilla, Opera, Tor Project. All reports were made                        site in a standard browser session) or sites (e.g., two sites
over 90 days in advance of this submission, as per the IEEE                        colluding to learn that browser sessions occurring on each site
“Ethical Considerations for Vulnerability Disclosure” guide-                       belong to the person). The commonality in all cases is the
lines. Microsoft and Opera responded that since the discussed                      users’ reasonable expectation that things that happen in one
vulnerabilities were in Chromium, they would wait for Google                       context are not readily known and available in another context.
to address the problem. The Tor Project similarly said they
would rely on Mozilla addressing the vulnerabilities.                              B. Description of “Pool-party” Attack
    We are in ongoing discussion with the Brave, Google, and                           This work presents a new category of side-channels in
Mozilla security teams regarding the vulnerabilities identified                    browsers that we call “pool-party” attacks. “pool-party” attacks
in this work. Each of the three browser vendors have filed                         are side-channels constructed by two parties manipulating
security bugs and have expressed intent to address these leaks.                    the state of limited-but-unpartitioned resource pools to send
Apple has also shared that they are exploring how to fix the                       signals across security or privacy boundaries. Differences in
issue.                                                                             browser architecture mean that browsers vary in terms of how,
  1 At time of writing, network state partitioning is being tested for a portion   and in how many ways, attackers can carry out “pool-party”
of Chrome users, as part of the engine’s “NetworkIsolationKey” feature             attacks, but all popular browsers are vulnerable at time of this
  2 Link to source code omitted for anonymization.                                 writing.
Algorithm 1 Toy example of a “pool-party” attack.                               Browser              DOM Storage   Network State
  Site A: Ia ← random N bits                                                    Brave                ⊕             ⊕
                                                                                Chrome               ×             ⊖
  Site B: Ib ← empty string                                                     Edge                 ×             ⊖
  while i ← Ia do                                                               Firefox              ⊕             ⊕
      Site A: Stop any playing videos                                           Safari               ⊕             ⊕
                                                                                Tor Browser Bundle   ⊕             ⊕
      if Ia [i] = 1 then
          Site A: Play a video
      end if                                                         TABLE I: State partitioning features in popular browsers (in
      Wait 5 seconds                                                 alphabetical order). ⊕, ⊖ and × indicate the feature being
      if Site B is able to play a video then                         available by default for all, some, or no users, respectively.
          Site B: Ib [i] = 1
      else
          Site B: Ib [i] = 0
      end if                                                         on the Web, the less noisy the channel will be, and iii) the
  end while                                                          larger the size of the resource pool, the higher the bandwidth
                                                                     of the resulting communication channel.

   This section describes how “pool-party” attacks work in           C. Relationship to Other Side-Channel Attacks
general; Section IV gives specific examples of how this cate-           “pool-party” attacks differ from other side-channel attacks
gory of attack can be executed in each browser.                      by targeting explicit, intentional, application-imposed limits.
    How “Pool-party” Attacks Work. “Pool-party” attacks              This differs from many other side-channel attacks in two ways,
work by manipulating pools of browser resources which are            and generally makes “pool-party” attacks more practical.
limited (i.e., the browser restricts how many of the resource            First, “pool-party” attacks target application-level re-
websites can open or consume) and unpartitioned (i.e., differ-       sources, while many other side-channels target parts of the
ent contexts consume resources from the same pool). While            system below, or at least distinct from, the application (e.g.,
the examples focused on in this work utilize limited-but-            hardware restrictions like CPU caches, OS details like inter-
unpartitioned pools of network connections, browsers include         rupt schedules or memory management, or language runtime
many other limited-but-unpartitioned resource pools that could       features like garbage collection). This is significant because,
be similarly exploited, such as pools of file handles, subpro-       the lower in the stack the attacker targets, the more likely it
cesses, or other resource handles.                                   is (all other things being equal) that the targeted resource will
    A “pool-party” attack occurs when parties operating in           be shared with other actors on the system. This means that
distinct contexts (contexts the user expects to be distinct and      lower-level side-channels are more likely to be noisy, and so
blinded from each other) intentionally consume and query the         more difficult to communicate over.
availability of the limited resources in a resource pool, to             Second, related but distinct, “pool-party” attacks target
create a cross-context communication channel. Each context           browser-managed resources, resources that are, in most cases,
can then use the communication channel to pass an identifier,        intentionally shielded from other applications on the system.
allowing each party to link the users behavior across the two        This again reduces the chance that colluding parties will have
contexts. We note again that most commonly the two contexts          to contend with a noisy, unpredictable side-channel.
considered here are two different websites running in the same
browser profile, but could also be the same (or different)
websites running in different browser profiles.                      D. Relationship to Other Tracking Methods

    Demonstrative “Pool-party” Attack Example. Again,                    “pool-party” attacks do not fall neatly into the categories
Section IV provides details on specific ways of executing            usually used to describe browser tracking techniques. This sub-
“pool-party” attacks in popular browsers, but we provide here        section briefly describes the rough-taxonomy used in online-
a simplified example of how attacks in this category work.           tracking research, and why “pool-party” does not cleanly fall
                                                                     into existing categories.
   For this toy example, assume a browser vendor wants to
improve performance by only allowing one video element to                State-full Tracking. “State-full tracking” most commonly
be loaded at a time, across all sites. If a video is currently       refers to websites using explicit storage APIs in the Web API
playing on any page, the site will receive an error if it tries to   (e.g., cookies, localStorage, indexedDB) to assign identifiers
play a new video.                                                    to browser users, and then read those identifiers back in a
                                                                     different context, to link the identity (or, browser behavior)
    Algorithm 1 presents a toy algorithm where by two collud-        across those contexts.
ing sites can trivially transform this optimization choice into
a cross-site tracking mechanism.                                         Stateful-tracking also describes other ways websites can set
                                                                     and read identifiers, by using APIs and browser capabilities not
    While in practice this approach would be slow, we note           intended for such purposes. Examples of such techniques in-
that it is only provided to demonstrate the concept, and actual      clude exploiting the browser HTTP cache, DNS cache or other
attacks are provided in Section IV. We note three details            ways of setting long term state (e.g., HSTS instructions [1],
though: i) the attack works for any limited-but-unpartitioned        favicon caches [2], or, ironically, storage intended to prevent
resource, ii) the less common the resource pool’ed feature is        tracking [3]).
Browsers increasingly protect users from stateful tracking                            Browser              Coordination   Stability   Uniqueness
by partitioning storage by context, mostly commonly be the                                Brave                ⊕              ⊕           ⊕
effective-top level domain (i.e., eTLD+1) of the website.                                 Chrome               ×              ×           ×
                                                                                          Edge                 ×              ×           ×
Giving each context a unique storage area prevents trackers                               Firefox              ⊕              ×           ⊖
from reading the same identifier across multiple contexts, and                            Safari               ×              ×           ⊕
so prevents the tracker from linking browsing behaviors in                                Tor Browser Bundle   ×              ×           ⊕

different contexts. Partitioning explicit storage APIs is often
referred to as DOM Storage partitioning. Partitioning caches                    TABLE II: Stateless tracking protections in popular browsers
and other “incidental” ways sites can store values is often                     (in alphabetical order). ⊕, ⊖ and × indicate the defense
called network state partitioning. Table I provides a summary                   is available by default, available but off by default, or not
of state partitioning in popular browsers.                                      available, respectively.
    Browser state partitioning strategies fail to defend against
“pool-party” attacks because “pool-party” attacks do not rely
on setting or retrieving browser state (at least not in the way                     In contrast to “state-ful” tracking techniques, “stateless”
state is generally discussed in this context, meaning the ways                  techniques do not require sites to be able to set and read
that sites can write state to the users profile). “Pool-party”                  identifiers across context boundaries, and so are robust to
attacks instead rely on implementation details of browser archi-                storage partitioning defenses. Stateless attacks instead rely on
tecture, where device resources are limited-but-unpartitioned.                  three conditions to be successful:
While partitioning strategies could also be used to defend
against “pool-party” attacks, as discussed in Section V, certain                 1) Coordination: code running in different contexts must
aspects of these attacks make partitioning approaches difficult                     know to query the same (or at least sufficiently large
in practice.                                                                        intersection of) browser attributes.
                                                                                 2) Stability: the browser must present the same values for
    Note on Chromium Partitioning Features. All analysis                            the same semi-distinguishing attributes across contexts
in this work uses a hardened, non-default configuration of                          (otherwise the browser will yield different fingerprints in
Chromium browsers. First, we disable third-party storage (i.e.,                     different contexts, preventing the attacker from matching
block third party cookies). Second, we enable Chromium’s                            the two fingerprints).
network partitioning features. These features, which are                         3) Uniqueness: the browser must present enough semi-
not enabled by default for most Chrome and Edge users                               distinguishing attributes to allow the site to accurately
are referred to generally as ‘‘NetworkIsolationKey’’                                differentiate between users (otherwise the attack will
(NIK) 3 . When enabled, the NetworkIsolationKey feature                             confuse two different users as the same person)
causes Chromium to partition network state by top level
eTLD+14 , in a manner similar to, but not quite as compre-                          Browsers defend against “stateless” trackers by attacking
hensive as, Gecko based browsers. Importantly, the Network-                     any of these three requirements. A browser might prevent
IsolationKey system partitions network state, but not DOM                       coordination by blocking fingerprinting code on sites, or
storage.                                                                        prevent stability by making the browser present different
                                                                                attributes to different sites (such as in [5], [6]), or prevent
   By default, NetworkIsolationKey features are disabled in
                                                                                uniqueness by reducing the entropy provided by each attribute.
Chrome and Edge, though they are enabled for a small
                                                                                Table II provides a summary of deployed “stateless” defenses
percentage of users as part of ongoing performance tests.
                                                                                in popular browsers.
Brave Browser, which is also built on Chromium, enables the
NetworkIsolationKey system for all users.                                           Browser defenses against “stateless” tracking techniques
                                                                                fail to defend against “pool-party” attacks because of differ-
    We choose to disable third-party state and enable the                       ences in the nature of the attack. “Stateless” techniques target
NetworkIsolationKey features in Chromium to demonstrate                         stable semi-distinguishing browser characteristics which are
that Chromium-based browsers are vulnerable to “pool-party”                     set by a page’s execution environment. “Pool-party” attacks,
attacks, even in highly hardened configurations.                                in contrast, are enabled by sites consuming and reading the
     Stateless Tracking. “Stateless tracking,” (also often called               availability of limited resources in the browser across execution
“browser fingerprinting”) refers to the category of Web track-                  contexts. Therefore, unsurprisingly, browser defenses against
ing techniques whereby the attacker constructs a unique iden-                   “stateless” tracking provide no protection against “pool-party”
tifier for the user by combining a large number of semi-                        attacks.
distinguishing browser and environmental attributes into a                               XS (Cross-Site) Leaks. “Pool-party” attacks are most
stable, unique identifier. Examples of such semi-distinguishing                     similar to a category of attack loosely called “XSLeaks” 5 ,
features include the operating system the browser is running                        a broad collection of ways sites can send signals to each other
on, the browser version, the names and the number of plugins                        in ways generally unintended by browser vendors. However,
or hardware devices available, and the details around the                           we note that in contrast to “state-ful”, “stateless,” “pool-party”
graphics and audio hardware present, among many others [4].                         attacks, XSLeaks do not have a common cause or remedy;
                                                                                    instead, XSLeaks can be largely thought of as a catchall
  3 https://github.com/shivanigithub/http-cache-partitioning#choosing-the-partitioning-key
  4 Chromium’s NetworkIsolationKey actually employs a more complex sys-             for cross-site (or cross-context) techniques that do not not
tem for determining the appropriate cache key for a resource than just the top      fit in another category. Examples of XSLeaks include timing
level frame’s eTLD+1, but for all purposes relevant to this paper, the system
can be simplified to “top level frame’s eTLD+1” without error.                    5 https://xsleaks.dev/
channels stemming from a variety of causes, unintended side                            hit, after which sites are prevented from accessing more
effects of experimental browser features 6 , or misuse of other                        resources, in a manner the site can detect.
browser APIs 7 .                                                                    2) The resource pool is unpartitioned, meaning that differ-
                                                                                       ent contexts (e.g., sites, profiles, etc.) all draw from the
    The lack of a common cause of XSLeaks makes it im-
                                                                                       same global resource pool. Put differently, it cannot be
possible to generalize about defensive strategies or deployed
                                                                                       the case that each context gets its own distinct resource
browser defenses. Recent work in this area has identified ways
                                                                                       pool.
sites can leak information across browser-imposed boundaries,
                                                                                    3) Sites can probe the state of the resource pool, to distin-
including through unintended side effects in how browsers
                                                                                       guishing between whether the pool has been exhausted,
handle errors, implement COOP 8 , CORP 9 , and CORB 10
                                                                                       or if some resources remain.
policies, or limit the length of redirection chains, among many
                                                                                    4) Sites can consume resources from the pool without
other signals [7].
                                                                                       restrictions, as long as the pool is not already exhausted.
    We note though that “pool-party” attacks are most common
to the “connection pool” attacks identified by the XSLeaks                            Any resource pool where the above four criteria are met can
project 11 . This work makes the following contributions beyond                   be transformed into a covert communication channel between
the issues documented by the XSLeaks project, and the related                     any two parties sharing the resource pool.
work done by Kinttel et al. [7].                                                      We have identified resource pools matching the above
    First, this work identifies and defines a larger category of                  four criteria in current versions of all popular browsers, even
attack, where by any limited-but-unpartitioned resource pool                      browsers that particularly emphasize their privacy features
can be transformed into a side-channel (and so, a tracking                        (e.g., Brave Browser, Tor Browser Bundle), and even when
technique). The connection pools attack documented by the                         browsers are “hardened”, by enabling non-default, privacy-
XSLeaks project is a subset of the larger category of attack                      focused features (as discussed in Section II-D).
discussed in this work. While limited-but-unpartitioned con-                         We now proceed by qualifying the un-optimized, proof-of-
nection pools can be used to conduct “pool-party” attacks,                        concept state of the algorithm, and then conclude by presenting
“pool-party” attacks can also be carried out in other browser                     and explaining the generic algorithm itself.
resource pool (e.g., resource handles, subprocess pools, etc).
Section V-A identifies resource pools in browsers that can                        A. Proof-of-Concept Status
be exploited for “pool-party” attacks that are not connection
pools.                                                                                Before walking through the algorithm, we wish to empha-
                                                                                  size that the current algorithm is intended as a proof-of-concept
    Second, we demonstrate that attacks of this type are not                      demonstration of “pool-party” attacks, and could be improved
just theoretically possible, but are practical, and are real-world                with a number of practical, trivial optimizations. Such opti-
threats to Web privacy.                                                           mizations might include compressing messages before sending
    Third, the presented “connection pool” attack relies on                       them, increasing the message transmission rate by including
abusing the connection pool to create timing channels, while                      lookup tables in the sending and receiving code, or extending
“pool-party” attacks utilize the number of available resources                    the protocol to be robust to noise (i.e., other sites using
in the pool to create the communication channel. This                             resources in the resource pool), among others. The simple
seemingly-small difference is significant. Using the amount                       approach in Algorithm 2 is only intended to demonstrate
of availability of resources in the pool as the communication                     that the attack is generic and practical, even in the naı̈ve
channel makes the attack more robust to noise introduced from                     implementation provided.
other sites, and means that mitigations against one form of the
attack may not apply to the other.                                                B. “Pool-party” Algorithm
                                                                                      We present a generic protocol for conducting a “pool-
   III.    G ENERIC “P OOL - PARTY ” ATTACK A LGORITHM                            party” attack over limited-but-unpartitioned resource pools
    In the previous section we presented the category of “pool-                   in all browsers. This protocol is presented as Algorithm 2,
party” attack in the abstract, explained why “pool-party”                         and provides a generic way a site can use a limited-but-
attacks are different from other attacks discussed previously                     unpartitioned resource pool to track users, by passing messages
in the literature, and why current browser defenses fail to                       across site boundaries (in a way not intended by any browser
protect against “pool-party” attacks. In this section we present                  vendor).
a generic algorithm for conducting “pool-party” attacks, which                     Protocol Inputs. The algorithm takes two inputs. The first
can then be applied to any resource pool in a browser where                    input is the limited-but-unpartitioned resource pool which the
the following conditions are met.                                              sending site and the receiving site will use to communicate.
 1) The resource pool is limited, meaning that sites can                       The size of the resource pool (i.e., the number of resources
      request resources from the pool until a global limit is                  in the pool available) is stored as POOL_SIZE. Any resource
                                                                               pool would work, as long as (a) it is limited-but-unpartitioned,
 6 e.g., https://xsleaks.dev/docs/attacks/experiments/scroll-to-text-fragment/ (b) sites can probe whether there are any resources still
 7 e.g., https://xsleaks.dev/docs/attacks/window-references/
                                                                               available in the pool, and (c) sites can arbitrarily consume
 8 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy
                                                                               resources from the pool.
  9 https://developer.mozilla.org/en-US/docs/Web/HTTP/Cross-Origin      Resource Policy (CORP)
  10 https://fetch.spec.whatwg.org/#corb                                             The second input to the algorithm is the message to be sent
  11 https://xsleaks.dev/docs/attacks/timing-attacks/connection-pool/             over the channel, which is a binary string of arbitrary length.
Algorithm 2 General algorithm for a “pool-party” attack.           the size of the communication channel, POOL_SIZE, as the
  Inputs.                                                          number of resources in the resource pool determine how
  POOL SIZE ← size of resource pool                                much information can be sent across the channel at a time.
  MSG ← binary string to transmit                                  The sending site then splits their message into PKT_SIZE
                                                                   sized chunks, yielding a vector of bit-strings each of size
  1. Setup.                                                        PKT_SIZE. Finally, the receiving site constructs an empty
  PKT SIZE ← ⌊log(P OOL SIZE)⌋                                     buffer, RECV_MSG, to stream the received message into one
  CHUNKS ← MSG split into packets of size PKT SIZE                 packet at a time.
  RECV MSG ← empty string                                              Step Two: Determining Initial Sender and Receiver.
                                                                   Next, the two sites determine which site will be the initial
  2. Determining Initial Sender and Receiver.                      sender and which the receiver. This negotiation is needed be-
  Both sites: try to consume > 50% of resources in pool until      cause, again, neither site initially knows what other colluding
  all resources are exhausted                                      site(s) may be open and available to communicate with, and
  if If “Site A” is able consume over > 50% of pool then           thus no way of assigning roles in the protocol.
       SENDER ← “Site A”
       RECEIVER ← “Site B”                                             Sites determine which site is the initial sender and the
  else                                                             initial receiver by racing to exhaust the resource pool. The
       SENDER ← “Site B”                                           site that is able to consume more than 50% of resource in the
       RECEIVER ← “Site A”                                         pool assigns itself the role of initial sender; the site that is
  end if                                                           prevented from requesting the 50% + 1 resource assigns itself
  Sender: consumes 100% of pool resources                          as the initial receiver.
  Receiver: releases all pool resources
                                                                       Once the parties have determined their roles in the protocol,
  3. Sending Data.                                                 the receiver releases the pool resources it holds, and the sender
  if SELF == SENDER then                                           keeps consuming resources until the pool is exhausted.
      for c ← CHUNKS do                                                Step Three: Sending Data. The third step of the protocol
          SEND INT ← binaryToDecimal(c)                            is where passing data across context (i.e., site) boundaries
          Release SEND INT resources from pool                     occurs. The sender and the receiver participate in this step of
          Probe pool until all resources are exhausted             the protocol as follows.
          Probe pool until resources are available
          Consume all resources in pool                                The sender manipulates the state of the resource pool as
      end for                                                      follows for each c in their CHUNKS vector (recall that CHUNKS
      Release all held pool resources                              is a vector of binary strings, each of length PKT_SIZE).
  else if SELF == RECEIVER then                                    For each c, the sender first interprets the binary as positive
      loop                                                         integer representation (e.g., 0010010 becomes 18, etc), which
          Probe pool until resources are available                 is stored as SEND_INT. The sender then releases SEND_INT
          Consume all resources in pool                            resources from the pool, and then probes the pool until the
          RECV INT ← number of consumed resources                  sender observes the pool is exhausted, indicating that the
          if RECV INT >= 2P KT SIZE + 1 then                       receiver is reading from the channel. The sender continues
              Break out of loop                                    probing the pool until there are resources available again,
          end if                                                   which indicates that the receiver has finished reading from
          RECV STR ← decimalToBinary(RECV_INT)                     the channel and is ready for the next chunk of data. If the
          RECV MSG k = RECV STR                                    sender has finished sending their message, the sender releases
          Release all held pool resources                          all resources in the pool and proceeds to the next step in the
      end loop                                                     protocol. Otherwise, the sender consumes all resources in the
  end if                                                           pool and repeats the current stage in the protocol.
                                                                       Simultaneously, the receiver begins this stage of the pro-
  4. Exchanging Roles.                                             tocol by probing the resource pool until it observes that
  Each party swaps roles. The sender becomes the receiver and      there are available resources in the pool. Once the receiver
  vice versa. Continue protocol from step 3. Sending Data.         is able to claim a resource, the receiver tries to consume as
                                                                   many resources as possible, which will be the SEND_INT
                                                                   number of resources released by the sender, and stores this
Note that sites begin the protocol without knowing which site      as RECV_INT. If RECV_INT is greater than or equal to
will be the initial sender and which site will be the initial      2P KT SIZE +1, the receiver knows the sender has released all
receiver (though the protocol could trivially be extended to       of the resources in the thread pool, indicating that the sender
enforce such a restriction). The binary string to be transmitted   has finished transmitting. 12 If so, the receiver will move on
is stored as MSG.                                                  to the next step of the protocol. Otherwise, the receiver will
                                                                   encode RECV_INT in the inverse manner the sender used (e.g.,
    Step One: Setup. Next, several intermediate values are
calculated by either or both parties. Both parties calculate the     12 Recall that, by construction, the sender is not able to obtain
size of each packet that will be sent across the communication     2P KT SIZE + 1 or more resources, and so the receiver can be certain that
channel. This value, stored as PKT_SIZE, is determined by          values in this range are not data the sender is attempting to transmit.
18 becomes 0010010), and concatenates the result onto the                                         Engine       Browsers
receiver’s RECV_MSG. The receiver then releases all resources                                     Chromium     Brave, Chrome, Edge
it holds, and repeats the above process.                                                          Gecko        Firefox, Tor Browser Bundle
                                                                                                  WebKit       Safari
   We note one edge case not yet handled by the algorithm.
As is, the algorithm presents a problem when the sender                      TABLE III: Summary of which popular browsers use which
wishes to send a chunk of data with decimal equivalent of                    underlying browser engine, in alphabetical order.
zero. This is a problem because, in its current form, the
sender would send this chunk by releasing zero resources,
which the receiver can not distinguish from no signal at all.                  Browser                Pool                 Size    Tracking Capability
We account for this ambiguous case by reserving the value
                                                                               Brave                  WebSockets            255    Cross-site
2P KT SIZE (one greater than the maximum value a packet                        Chrome                 WebSockets            255    Cross-site
can otherwise encode) to signal a packet of all zeros. For                     Edge                   WebSockets            255    Cross-site
example, if PKT_SIZE is 7, then the sender would signal                        Firefox                WebSockets            200    Cross-site & Cross-profile
                                                                               Safari                 Server-Sent Events      6    Cross-site
a chunk of 0000000 by releasing 128 threads, encoding the                      Tor Browser Bundle     WebSockets            200    Cross-site & Cross-profile
value 10000000 into the resource pool.
    Step Four: Exchanging Roles. Finally, if desired, the                    TABLE IV: The capability used to conduct the “pool-party”
two parties can exchange roles to pass data in the receiver to               attack in each browser, the size of the resource pool being
sender. This is trivially accomplished by each party assuming                exploited, and what contexts can be linked through the attack.
the opposite role, and continuing again from step 3. Otherwise,
if there is no more data to transmit, both parties can abort
the protocol. Note that the protocol itself does not provide
a mechanism for the parties to indicate whether they wish to                 (encoded as a bit string) across contexts. And third, we
continue or end the protocol, though parties could easily signal             measure the stability of the particular “pool-party” attack, by
such through the contents of the messages being passed.                      conducting a representative crawl of the Web, and measuring
                                                                             how frequently we observe how much the communication
 IV.    E VALUATION OF “P OOL - PARTY ” V ULNERABILITIES                     channel is used on the Web currently (and so, how much noise
                 IN P OPULAR B ROWSERS                                       an attacker might have to contend with when conducting the
                                                                             attack).
    In the previous section we presented a generic algorithm
for turning limited-but-unpartitioned resource pools into cross-
context communication channels, which in turn can be used to                 A. Browser Selection
cookie-sync and track users across the Web. In this section we
demonstrate two examples of such limited-but-unpartitioned                       We group browsers by their underlying rendering engine.
resource pools in popular browsers, and measure how ex-                      We did not identify any instances where different browser
ploitable and practical they are for cross-site tracking.                    engines, using the same engine, were differently vulnerable.
    Specifically, we show that practical forms of “pool-party”               All attacks that worked against Firefox also worked against
attacks can be carried out in all popular browsers. In Chromium              Tor Browser Bundle, and all the attacks that worked against
and Gecko-based browsers, we demonstrate this vulnerability                  Chrome also worked against Brave and Edge, etc. We note
by exploiting those browsers limited-but-unpartitioned imple-                that enabling or disabling Chrome’s non-default partitioning
mentation of the WebSockets API 13 . Safari’s implementation                 features (discussed in Section II-D), and enabling or disabling
of the WebSockets API is not limited-but-unpartitioned (there                third-party storage in Chromium, had no effect on how vul-
is no explicit limit on the number of websocket connections                  nerable Chromium-based browsers were.
that can be open). Instead, we demonstrate Safari’s vulnerabil-                  A brief summary of the browsers and their underlying en-
ity to “pool-party” attacks through the browser’s implementa-                gines, and hence the applicability of the below measurements,
tion of the Server-Sent Events (SSE) API 14 . Safari’s SSE pool              is presented in Table III.
is much smaller than Chromium or Gecko’s websocket pool
(6 connections, versus 255 or 200 connections, respectively),
which makes the attack slower in Safari, though still practical.             B. Attack Availability
    For both of these attack vectors, we conduct three mea-                      Methodology. We measure the availability (and so, ex-
surements to analyze the practicality and severity of the attack.            ploitability) of each attack by first examining the source
First, we discuss the availability of the attack in each browser             code of each browser engine and identifying limited-but-
engine, meaning we present the size of the resource pool in                  unpartitioned resource pools. We then implemented attacks
each browser engine and what kinds of context-linking are                    against each browser based on the algorithm presented in
possible using that resource pool in each browser engine (e.g.,              Section III, implemented in JavaScript 15 . We then examined
cross-site communication, cross-profile communication, etc.).                whether we could use the relevant resource pool to create a
Second, we measure the bandwidth of the communication                        side-channel and communicate across site boundaries, across
channel, by measuring how long our unoptimized, proof-                       profile boundaries, or both. Importantly, we test whether the
of-concept algorithm takes to transmit a unique identifier                   attack technique can be used to communicate between a
  13 https://developer.mozilla.org/en-US/docs/Web/API/WebSockets     API
  14 https://developer.mozilla.org/en-US/docs/Web/API/Server-sent   events     15 Link   to source code omitted for anonymization.
standard-browsing profile, and a “private browsing mode”                            open two pages on two different domains we controlled.
profile 16 .                                                                        Each page includes an implementation of the relevant “pool-
                                                                                    party” attack (SSE in Safari, websockets in all other browsers),
    Results. Our availability measurements yielded several                          implemented through JavaScript included in the page. We then
significant findings, summarized in Table IV.                                       measure how long it takes to conduct the second and third steps
    First, we were able to identify exploitable limited-but-                        of Algorithm 2. We then conduct this measurement 50 times,
unpartitioned resource pools in all browsers, which we were                         using a clean browser profile for each measurement.
successfully able to exploit through “pool-party” attacks. As                          We note that we were unable to conduct these measure-
noted, the resource pools targeted in each browser engine                           ments in the Tor Browser Bundle, because of issues with using
differ. We were able to use the relatively large WebSockets                         Selenium to automate the browser. However, manual testing
connection pool in Chromium and Gecko based browsers to                             anecdotally suggests that attacks against the Tor Browser
conduct “pool-party” attacks. Safari’s WebSockets implemen-                         Bundle behaves similarly to Firefox, after accounting for the
tation was not exploitable, since WebKit does not restrict how                      slowdown induced by the Tor network.
many WebSocket connections can be opened simultaneously.
Safari’s implementation of the SSE API, though, was ex-                                 Results. We report the results of our bandwidth mea-
ploitable (Chromium and Gecko’s implementation of the SSE                           surements in Table V. Times are reported in seconds, and the
API was not exploitable).                                                           aggregate values are reported over 50 independent executions
                                                                                    for each measurement.
    Second, and importantly, we found that Gecko-based
browsers (i.e., Firefox and the Tor Browser bundle) were                                We note several significant findings. First, we find that
vulnerable to “pool-party” attacks in a way more concerning                         attacks are practical, even given the current, unoptimized
than other browser engines. While “pool-party” attacks can be                       version of the attack described in Algorithm 2. Even in its
used for cross-site tracking in all browsers, in Gecko-based                        current form, the attack could be carried out between pages
browsers “pool-party” attacks can be used to track users                            that are left open for a moderate amount of time, either because
across profiles. Significantly, this means that, in Gecko-based                     they get lost in a browser users ever-growing collection of tabs,
browsers, sites can conduct “pool-party” attacks between pri-                       or because the site is intended to stay open for a long time
vate browsing sessions and standard browsing sessions. More                         (e.g., sites that function and email clients, instant messaging
concretely, a site running in a private browsing window can                         applications, video streaming sites, etc). Simple optimizations
collude with a site running in a standard browsing window, and                      (introducing parallelism into websocket or SSE construction
identify both sessions as belonging to the same person. This                        or teardown steps, message compression, etc) would further
is particularly concerning since it violates the core promise                       reduce the amount of time needed to conduct such attacks.
of a private browsing session; that behaviors conducted using
a private browsing are “ephemeral”, and cannot be linked                                Second, there is an unsurprising but important trade-off
other accounts or behaviors a user maintains. Additionally, this                    between resource pool size and bandwidth. Attacks utilizing
vulnerability undermines the work and research that has been                        small resource pools (such as the Safari attack over SSE
done to strengthen private browsing modes in browsers (for                          resources) can be setup faster (since there are fewer resources
example, [8], [9], [10]).                                                           the parties need to consume to coordinate), but then take
                                                                                    longer to transmit messages (since communication in the pool
    Third, we found no variation of how vulnerable browsers                         is constrained). Communicating through larger resource pools
are, within the same browser engine. Though browser vendors                         (such as Chromium’s WebSocket implementation), conversely,
like Brave and the Tor Foundation add many privacy features                         takes longer to setup, but then can transmit data faster. More
that other browsers using the same browser engine lack, the                         generally, smaller resource pools can send smaller messages
Brave Browser and Tor Browser Bundle were just as vulnerable                        faster, while larger connection pools can send larger messages
to “pool-party” attacks as other browsers based on Chromium                         faster (since the one-time setup cost reduces in significance as
or Gecko, respectively.                                                             the number of messaging rounds increases).
                                                                                        Third, we observe very little performance difference be-
C. Attack Bandwidth                                                                 tween different browsers using the same browser engine, at
    Methodology. We measured the bandwidth of each attack                           least within the three Chromium browsers included in this
by measuring how long our non-optimized “pool-party” attack                         measurement.
takes to transmit a 35-bit string across site boundaries.
                                                                                    D. Attack Stability
    We selected a 35-bit string for two reasons. First, because
it is over 33-bits, or what is needed to uniquely identify                              Methodology. To evaluate the stability of the “pool-party”
the approximately 7.9 billion people on the planet, and two,                        channels discussed in this section, we measured how often
because it aligns cleanly with the 5-bit packet size used in                        these resource pools are used by sites for other purposes,
WebSocket experiments.                                                              from the intuition that resource pools that are less commonly
                                                                                    used (and so more frequently fully available) are easier to
  We conduct each measurement as follows. First, we instru-
                                                                                    convert into side- channels. Put differently, if sites are already
ment each browser using Selenium, and have each browser
                                                                                    participating in a resource pool for benign purposes, then other
   16 This feature goes by different names in different browsers, but generically   sites intending to use it as a covert communication channel
refers to the ability to run the browser in a way where stored values only last     have to contend with more noise and uncertainty, and thus
the lifetime of the browsing session.                                               communication will be more difficult.
Setup Phase                       Sending Phase                              Total
                      Browser    Method         Mean        Median     Std Dev       Mean      Median    Std Dev           Mean        Median    Std Dev
                      Brave      WebSockets      59.9          59.3            3.3    50.2         50.0             0.8     110.1        109.4       3.5
                      Chrome     WebSockets      61.6          60.4            4.7    46.4         46.0             1.8     108.0        106.5       5.8
                      Edge       WebSockets      58.6          58.3            2.5    45.9         45.8             1.0     104.5        104.2       2.9
                      Firefox    WebSockets      69.4          68.6            8.1    64.8         63.0            15.4     134.2        133.0      17.8
                      Safari     SSE             19.2          16.5           20.1   163.9        163.8             2.1     183.0        180.0      20.4

TABLE V: How long it took to transmit a 35-bit string across site boundaries using a “pool-party” attack. Values are over 50
measurements, and reported in seconds.

                                                                                       WebSockets                              SSE
                                                              Success Rate       # of Sites  % of Sites        # of Sites         % of Sites
                                   High Popularity Sites              93.3%           669            7.2%                 51           0.5%
                                   Less Popular Sites                 95.7%           816            8.5%                 19           0.4%

TABLE VI: Measurements of how much resource contention we saw in the resource pools used for the “pool-party” attacks
measured in this work. The “High Popularity” measurements are taken on the Alexa 10k. “Less Popular” measurements are
taken from 10k sites randomly sampled from sites ranked 10k + 1 through 100k in the Alexa top site rankings.

    We measured the stability of our “pool-party” attacks by                                Third, we had our crawler visit the landing page of each
examining how often Web sites use WebSocket and/or SSE                                  site. If the site failed to load for any reason (e.g., invalid
capabilities; the less “background” use of these APIs on the                            certificate, server is offline, etc.) we noted the measurement as
Web, the less noise an attacker would need to contend with,                             an error. Otherwise, we let the page execute for 10 seconds,
and so the more stable the “pool-party” attack. We conducted                            noted the number of WebSocket and SSE connections used,
these measurements through the following steps.                                         and then closed the page. Each measurement was taken in a
                                                                                        new browser profile.
    First, we built a Chrome-based crawler, using the Pup-
peteer 17 automation framework. This crawler was constructed                                Results. The results of our stability measurements are
to measure how many WebSockets connections, and how many                                summarized in Table VI. The results lead us to conclude
SSE connections, were used during the execution of the page                             that the attack could practically be carried out, which a high
                                                                                        success rate. The vast majority of sites do not use either of
    We measured how many WebSockets were used by hooking                                these browser features, meaning that in the common case sites
into already existing functionality in Chrome. Chrome records                           could use the resource pool without bother from other pages.
whenever a website tries to create a WebSocket connection in                            The probability that, for two randomly selected sites, neither
a histogram, along with a wide range of other browser per-                              page is using WebSocket connections is 86.1% and 83.2% for
formance measurements. These measurements can be viewed                                 popular and less popular sites, accordingly. The odds are even
by visiting chrome://histograms in a Chromium-based                                     more favorable (for the attacker) for SSE connections. The
browser, or programmatically through Chrome’s devtools                                  probability that neither of two randomly selected sites are using
API 18 .                                                                                SSE connections is > 99.0% and > 99.2% for popular and less
   We measured SSE use through an extension that modifies                               popular sites, respectively.
the browser’s EventSource 19 prototype to log whenever                                      We note again that these success probabilities are only
a page instantiates a new EventSource object, or calls the                              for the simplistic version of the algorithm presented in Sec-
object’s close() 20 method.                                                             tion III-B, which is not able to account for other actors drawing
    Second, we deployed our crawler on two sets of websites,                            resources from the resource pool. A slightly more sophisticated
to measure whether there were differences in WebSocket or                               version of the algorithm, one that could account for some noise
SSE use between popular and less popular sites. We con-                                 on the channel, would have even higher odds of success.
structed these sites as follows:                                                           Measurement Limitations. We briefly note some of the
                                                                                        limitations of this crawl methodology, and why we think they
 1) The High Popularity 10k set consists of the 10k most                                do not significantly impact the conclusions discussed above.
    popular websites, as determined by the Alexa Top Sites
    rankings.                                                                         First, we note that this crawl could be made more robust
 2) The Less Popular 10k set comprises a random sampling                         in a number of ways, such as crawling child pages on the site
    of 10k websites taken from sites ranked 10k+1 through                        or interacting with the page. Web measurements exist on a
    100k, according the Alexa Top Sites rankings.                                spectrum from extremely simple (e.g., measuring a website
                                                                                 using only curl 21 ) to extremely complex (e.g., multiple
 17 https://github.com/puppeteer/puppeteer                                       measurements, from multiple IPs, from multiple browsers).
 18 https://chromedevtools.github.io/devtools-protocol/tot/Browser/#method-getHistograms
                                                                                 The measurements in this subsection exist between those
 19 https://developer.mozilla.org/en-US/docs/Web/API/EventSource
 20 https://developer.mozilla.org/en-US/docs/Web/API/EventSource/close                       21 https://curl.se/
extremes.                                                                           WebKit. We identified far fewer additional limited-but-
                                                                                unpartitioned resource pools in WebKit than in other browser
    Second, we note that in practice, sites colluding in a “pool-               engines. We did not identify any additional attack vectors in
party” attack would need to contend with the union of all open                  Safari (the most popular browser built on WebKit). However,
sites accessing resources from the relevant resource pool, and                  other, less popular browsers are also built on WebKit, and some
not simply the parties committing the “pool-party” attack. The                  of these introduce additional limited-but-unpartitioned resource
numbers resulting from our methodology are a lower bound                        pools. For example, the GTK-based version of WebKit 25
on how noisy the given resource pool would be, and attackers                    includes a built-in DNS resolver that has a global limit of
might need to implement ways of communicating over noisy                        8 requests at a time, and a pre-fetch cache with a limit of 64
channels.                                                                       hosts.
    That said, we believe that our approach is sufficient for
the purposes of this work. Our aim is not to precisely under-                   B. Defenses and Constraints
stand the behavior of particular webpages, but get a general,
aggregate understanding of how often, and how much, these                           Defending against “pool-party” attacks in browsers is diffi-
resource pools are used on the Web for non-“pool-party” attack                  cult since, at root, systems will always have limited resources,
purposes. We note too that our numbers are similar to those                     and thus some underlying limited-but-unpartitioned pool that
recorded by the Chrome project’s public telemetry (which finds                  can be exploited by a sufficiently motivated party. Currently
that WebSockets and SSE are used on less than 7% 22 and                         browser resource limitations are mostly explicit and inten-
1% 23 of popular websites, respectively), giving us further                     tional, but even if browsers removed such limits (e.g., limits
confidence that our methodology is sufficiently robust.                         on WebSocket connections), the underlying system would
                                                                                necessarily have a global limit, either explicitly (e.g., OS
                                                                                imposed limitations on open network sockets) or implicitly
                           V.    D ISCUSSION
                                                                                (e.g., systems have a finite amount of memory, and so
A. Additional Attack Vectors                                                    unavoidably can only maintain a finite number of network
                                                                                sockets).
    In this work we demonstrated that “pool-party” attacks are
possible and practical in all popular browsers, by exploiting                      However, even if “pool-party” attacks will fundamentally
the limited-but-unpartitioned implementations of WebSockets                     always be possible, browsers can still take steps to limit how
and Server-Sent Events. However, there are many other “pool-                    practical such attacks might be.
party” attack opportunities in current browsers. This section
details some additional APIs and browser capabilities that can                      One approach is to lift browser-imposed limits on resource
be converted into side-channels though “pool-party” attacks.                    pools where applicable, and require attackers to contend with
We do not intend this to be a comprehensive list; we expect that                much larger system maintained resource pools. This would
there are many more “pool-party” attack vectors in browsers.                    make attacks much more obvious to the user, who would
We identified the below browser capabilities and APIs as likely                 notice their system slowing down or other applications on the
exploitable by “pool-party” attacks based on their implemen-                    system impacted while the attack was being carried out. Such
tations in Gecko, WebKit and / or Chromium, though we did                       detectability might deter attackers, at least in the common
not build attacks to test the exploit-ability of all listed APIs.               case. Relying on the OS or system level limits would also
                                                                                make attacks more difficult to carry out. For example, the
    Chromium. Chromium’s DNS resolver has a global,                             system network connection pool will be much “noisier” than
unpartitioned limit of 64 simultaneous requests, which could                    the browser’s WebSocket pool, making it much more difficult
be exploited by an attacker that can control the response                       to use the resource pool as a reliable covert channel.
time of DNS queries to a nameserver they control. Second,
when Chromium browsers are configured to use an HTTP                                Second, browsers could take the opposite approach, and
proxy, they impose a global limit of 32 network requests at                     instead of dramatically widening the size of resource pools,
a time. Third, several APIs in Chromium are thin-wrappers                       browsers could maintain existing resource caps but partition
around OS-provided systems, and maintain a single global                        resource pools the same way browsers increasingly partition
handle to the system process, effectively creating limited-but-                 DOM storage and network state (see Section II-D). If resource
unpartitioned pool of size one. Though small, this would be                     pools were partitioned by site, a site would not learn anything
sufficient to carry out attacks like the toy example given in                   by exhausting its resource pool; the resource pools for other
Section II-B. Chromium’s implementation of the Web Speech                       sites would be unaffected. A determined attacker could regain
API 24 is one such example.                                                     the ability to conduct a “pool-party” attack by controlling a
                                                                                large number of sites, and using them to collectively drain the
    Gecko. Browsers built on Gecko have many of the same                        resource pool. Nevertheless, partitioning resource pools by site
additional attack vectors as Chromium based browsers. Gecko                     would make “pool-party” attacks significantly more difficult
similarly has a global limit on the number of DNS requests                      for an attacker to carry out.
that can be in the air at the same time, and a lower limit on
the number of network requests that can be open when using                         Third, browsers could combine these two approaches, and
a HTTP(S) proxy.                                                                simultaneously remove global limits on the size of resource
                                                                                pools, but limit the number of resources each site or context
  22 https://chromestatus.com/metrics/feature/timeline/popularity/1149          and use. Such a hybrid approach would achieve some of the
  23 Sum of https://chromestatus.com/metrics/feature/timeline/popularity/1480   benefits of both of the above approaches.
and https://chromestatus.com/metrics/feature/timeline/popularity/1479
  24 https://developer.mozilla.org/en-US/docs/Web/API/Web Speech API              25 https://trac.webkit.org/wiki/WebKitGTK
You can also read