Skip to content
All fingerprint checksEngine & OS oracles

the platform's system font belongs to the operating system claimed

Check id system-font-vs-claimed-os

What an ordinary browser yields

At least two CSS2 system-font keywords resolve to families belonging to one operating system, and that is the operating system the user agent claims.

What a detector infers

The CSS2 system-font keywords — caption, icon, menu, message-box, small-caption and status-bar — are resolved by the HOST platform's font APIs, not by the page and not by anything the user agent controls. Read one back through getComputedStyle and the operating system underneath answers: Windows returns Segoe UI, macOS returns -apple-system, a GNOME desktop returns Cantarell. Changing navigator.platform or the user agent does not move them, because nothing in that path is consulted. This row therefore holds the operating system a browser CLAIMS against the one its font stack is actually running on. It exists because of a gap that was measured rather than assumed. The audit's other OS oracles — the libm route through Math.tanh, the hyphenation dictionaries, the CPU-architecture Client Hint, the Keyboard API, performance.memory — are all Chromium surfaces. Run against a Gecko build presenting a Linux persona on a Windows host, every one of them returned N/A, which meant an entire class of browser could claim any operating system and nothing below the JavaScript layer would contradict it. The CSS2 keywords work on every engine, and a WebKit build presenting a macOS user agent on a Windows host was measured resolving all six of them to Segoe UI — the host's font, under a claim of a different platform. This is also the one check on this page that carries a lookup table, so it is worth being explicit about how the table is used: ONLY TO RECOGNISE, NEVER TO EXPECT. There is no per-OS list of what a system font ought to be, because that is exactly the kind of table that rots when a desktop environment changes its default. A family the table does not recognise, a generic answer such as sans-serif, or a cross-platform face such as Arial simply does not vote; with fewer than two recognised votes, or with votes that disagree about which OS they come from, the row declines. A new operating system, a themed desktop, or a browser that answers a generic all produce silence rather than an accusation.

How to resolve it

These keywords are answered by the platform beneath the browser, which is why they survive a user-agent change. A persona presenting a different operating system has to spoof the system-font resolution alongside everything else, and doing that properly means the font stack rather than a JavaScript override, since the value arrives through getComputedStyle from the style system. The more robust alternative is to run on the operating system being claimed — the same host mismatch shows up in font metrics and in text rasterisation, not only here.

What is font fingerprinting?

Read in the wild by

Camoufox (measured)

Not a sighting of a failure, but of the surface mattering. Camoufox's maintainers list "font leaks between OSes" as a carried-forward, high-priority defect describing exactly this — the CSS2 keywords resolving to the real host system font regardless of the spoofed navigator.platform, biting only when the spoofed OS differs from the build's. The current upstream build defends it: forced to a macOS persona on a Windows host it returned -apple-system for all six keywords, and forced to Linux it returned a generic, which this row declines on. Recorded because it establishes the vector is real and actively defended rather than hypothetical.

Camoufox 0.5.4 forced to os=macos: all six keywords "-apple-system", navigator.platform "MacIntel" — 0/6 leaked. Forced to os=linux: all six "sans-serif", declined. Playwright's WebKit under a "Macintosh; Intel Mac OS X" user agent on the same Windows host: all six "Segoe UI". Stock Chrome 150, Firefox 151 and CloakBrowser on Windows: Segoe UI under a Windows claim.

camoufox.com

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

Other checks in Engine & OS oracles

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 Engine & OS oracles 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 Engine & OS oracles — the family system-font-vs-claimed-os belongs to.