Skip to content
All fingerprint checksNavigator identity

UA-CH brand version matches the UA Chrome version

Check id uach-ua-version

What an ordinary browser yields

The Chrome major in the UA string equals the version on the Chrome/Chromium brand entry in navigator.userAgentData.brands.

What a detector infers

The check extracts the major from Chrome/(\d+) in the UA string, finds the Chrome or Chromium entry in navigator.userAgentData.brands, and requires the brand's version to equal that major. Both fields come from the same version constant in a real build, so a disagreement identifies a hand-edited field directly. It matters more than a cosmetic mismatch: the claimed Chrome major also predicts the TLS ClientHello shape and the HTTP/2 SETTINGS the binary actually emits, so lying about it in JS desynchronises the JS layer from network-layer evidence the page cannot rewrite — a detector cross-referencing them gets a contradiction with no innocent explanation. The check is N/A-safe: if the UA carries no Chrome token, or the brand list has no Chrome/Chromium entry, it passes rather than guessing.

How to resolve it

Do not spoof brand_version to a different major than the binary actually is. If you need a different reported version, run a build that genuinely is that version so the UA, UA-CH, and handshake agree. Presets such as light_stealth leave the brand version real for this reason.

What are User-Agent Client Hints (UA-CH)?

Read in the wild by

PerimeterX / HUMAN

Requests "brands" and "uaFullVersion" from navigator.userAgentData.getHighEntropyValues, and ships the brand list with its per-brand major version, the uaFullVersion string, and navigator.userAgent as separate fields of one payload.

stample/ifood/source/main.min.js: `navigator.userAgentData.getHighEntropyValues([...,"brands","mobile","model",...,"platformVersion","uaFullVersion"]).then((function(t){pj=t` then `t[0][hQ(872)]=pj.brands`, `t[0]["R3cyPQIXMQw="]=pj.uaFullVersion`, `t[0]["RBBxWgJydmw="]=hU[hQ(845)]` (hU=navigator; hQ_map.json 845="userAgent", 872="WGRtbh0Eb1Q="), `t[0]["Q3M2OQYTMAM="]=!!hU.userAgentData`. decoded_payload_2.json: "WGRtbh0Eb1Q=": [{"brand":"Chromium","version":"148"},{"brand":"Google Chrome","version":"148"},{"brand":"Not/A)Brand","version":"99"}], "R3cyPQIXMQw=": "148.0.7778.168", "RBBxWgJydmw=": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 Safari/537.36", "Q3M2OQYTMAM=": true

Every attribution traces to a published artifact. See the sources and their limits.

Nearby checks in Navigator identity

See all 26 checks in Navigator identity
Who builds this test

Clearcote is a browser built for fingerprint coherence

It is a Chromium fork, maintained by the same people who wrote this reference. It ships as a compiled browser rather than as a stealth script injected into someone else's — which is a description of how it is built, and is not an argument about how it behaves on this check.

This audit takes no position on how Clearcote scores on Navigator identity checks, on this one, or anywhere else. It has no baseline corpus of other people's fingerprints to rank you against and no vendor scoreboard — nearly every check is self-referential, asking one browser the same question through two independent APIs and reporting whether both answers can be true at once. It runs identically on any browser, including ours. Run it on yours and read the result yourself.

See the other checks in Navigator identity — the family uach-ua-version belongs to.