Android device model does not match its device-fixed screen geometry

br.android_model_screen_incoherent  ·  convicts

browserlayer
coherencecategory

What it catches

DEVICE-model <-> screen coherence on the Android manifold — the joint a coherent model spoof must still satisfy once the model itself is pinned across header+main-JS+worker (net.ch_ua_mobile_no_model / br.mobile_no_js_model / br.uadata_model_worker_divergence). A claimed Android model names a specific handset whose LOGICAL screen is device-fixed; the collector keys the getHighEntropyValues().model against the real per-model portrait CSS geometry (from the device corpus; the set is seeded from Playwright's maintained Android device registry — Pixel 2..7, Nexus, Galaxy SM-*). An Android Chrome reports model + screen from the SAME hardware, so a model PRESENT with a screen that is not that model's is a randomizer that drew model and screen from DIFFERENT devices — a naive spoof; a coherent one keeps model+screen+UA from ONE real device. This is the Android analog of br.ios_screen_offmanifold, but keyed by the exact MODEL (not a set membership), so it is tighter. EXPERIMENTAL (w0.5, corroborating): only fires for a model IN the maintained set with a mismatched portrait screen — an unknown/new model skips (FP-safe on new hardware), and the set needs periodic refresh from the device corpus; a coherent randomizer (model+screen from one device, e.g. KS_DEVICE) EVADES by construction, which is the manifold point. GROUNDED LIVE: KS_DEVICE='Pixel 5' + a forged model 'Pixel 5' (screen 393x851 matches) is SILENT; KS_DEVICE='Pixel 7' (screen 412x915) + a forged model 'Pixel 5' (expects 393x851) FIRES — model and screen from different devices.

Signals it reads

browser.android_model_screen_incoherent

How it fires

present

Bypassed by 10

Frontier evaders that reach the detector uncaught (scored only suspicious, defeating every convicting tell) — this check is not one that stops them. The red-team frontier this detection still has to convict.

← all detections