22

I was looking at http requests sent by chrome in Fiddler, and I noticed following http header which puzzles me:

 X-Chrome-Variations: CNa1yQEIjrbJAQiYtskBCKK2yQEIp7bJAQiptskBCLmDygE=

This is a base64 encoded 35-byte array:

8,214,181,201,1,
8,142,182,201,1,
8,152,182,201,1,
8,162,182,201,1,
8,167,182,201,1,
8,169,182,201,1,
8,185,131,202,1

I've seen several examples of this number on the web.

Can anyone explain to me what this is, and why chrome sends it out (and if it could be used to identify/track me)?

Gilles 'SO- stop being evil'
  • 92,660
  • 35
  • 189
  • 229
Arsen Zahray
  • 21,834
  • 46
  • 119
  • 205
  • 2
    Can you go to chrome://version/ and check if there is a new entry for you that starts with "Variations". Do the values there correlate with your header information? –  Sep 16 '12 at 06:48
  • Note: This header was renamed to X-Client-Data in Chrome 33. https://cs.chromium.org/chromium/src/components/variations/net/variations_http_headers.cc?type=cs&sq=package:chromium&g=0&l=34 – EricLaw Jun 17 '19 at 18:53

1 Answers1

45

Google Chrome developers test experimental features by enabling a feature for a small random selection of Chrome installs and watching how the feature works. The common term for this is field trials. When Google Chrome runs for the first time, it generates a random number between 1 and 8192 and later uses it to determine whether to participate in a particular field trial.

The "Google Chrome and Privacy" whitepaper (PDF, October 2012, current as of Chrome 22.0.1229.79) provides these details.

To help guide the construction of features that users actually find useful, a subset of users may get a sneak peek at new functionality before it’s launched to the world at large. The field trials that are currently active on your installation of Chrome will be included in all requests sent to Google servers to allow Google to filter logs for only those generated by a given variation of Chrome. This Chrome-Variations header will not contain any personally identifiable information, and will strictly describe the state of the installation of Chrome itself.

The variations active for a given installation are determined by a seed number between 1 and 8192 (13 bits of entropy) which is randomly selected on first run. If you would like to reset your variations seed, run Chrome with the command line flag “--reset-variation-state”.

Google Chrome sends information about which field trials are currently active to all domains of the form *.google.<TLD> (where .<TLD> is a top-level domain, such as .com, .org, .co.uk, .cn, .biz and so on). Most but not all of those domains are owned by Google. The field trial identifiers are stored in a protocol buffer, encoded with base64 and sent in the X-Chrome-Variations header. If you have opted in to send usage statistics and crash reports to Google (a checkbox accessible at chrome://​chrome/​settings/​search#privacy), an X-Chrome-UMA-Enabled: 1 header is also sent. The headers are not sent when in Incognito mode.

Starting with revision 156914 (included in Chrome 23 and later versions according to the release table), the list of field trials is displayed under the Variations title on the about:version page.

The relevant source code is in the chromium/​src/​chrome/​browser/​renderer_host/​chrome_resource_dispatcher_host_delegate.cc file. The headers are sent in the ChromeResourceDispatcherHostDelegate::​AppendChromeMetricsHeaders method. The value of X-Chrome-Variations is constructed in the ChromeResourceDispatcherHostDelegate::​UpdateVariationIDsHeaderValue method. Field trials are defined using the base::FieldTrial class from file src/​base/​metrics/​field_trial.h

As for the ability to track you using those headers, that depends on the uniqueness properties of the actual combination of your field trials, which I'm not aware of. But keep in mind that even if you strip the X-Chrome-Variations headers, disable cookies, local storage and Flash local storage, your browser may still be identifiable using cache fingerprinting techniques or using the combination of the request headers it normally sends, your system configuration info available to JavaScript or Flash and possibly the IP address blocks you tend to use, as demonstrated by EFF's Panopticlick. So the privacy game is basically lost unless you use a carefully configured Tor with Privoxy setup, and even then leaks are possible.

Community
  • 1
  • 1
Till Ulen
  • 1,449
  • 1
  • 13
  • 16
  • Is this the same as `variations_compressed_seed` in `C:\Users\S\AppData\Local\Google\Chrome\User Data\Default\Preferences` ? – Shayan May 24 '19 at 00:28
  • FYI those source links are broken now. [Here's the protobuf definition](https://cs.chromium.org/chromium/src/components/variations/proto/client_variations.proto?rcl=f15a7195cf879357d5f9a50c8cd6cd3382366433), [here's where the header contents get created](https://cs.chromium.org/chromium/src/components/variations/variations_http_header_provider.cc?l=253&rcl=f15a7195cf879357d5f9a50c8cd6cd3382366433) and [here's where the header is added](https://cs.chromium.org/chromium/src/components/variations/net/variations_http_headers.cc?l=105&rcl=f724892ec9dc5617f444d18d5bdf72339a7eaf5b). – Ted Mielczarek Jan 30 '20 at 17:47