WebGL is emulated but WebGPU is not — navigator.gpu leaks your real GPU in two lines of JavaScript

cesario678

Client
Регистрация
10.03.2022
Сообщения
237
Реакции
14
Баллы
18
Hi,


Setup: ZennoPoster 7.9.1, Windows 11, Intel Iris Xe. WebGL emulation enabled in profile settings. Profiles randomize between Windows, Linux and macOS.


Context: I built a local HTML page that audits the fingerprint from inside the profile — 49 fail conditions, 71 weighted warnings, covering WebGL, WebGPU, canvas, audio, fonts, Client Hints and main-thread vs Worker consistency. One of its checks compares the GPU vendor reported by WebGL against the one reported by WebGPU. That check fires on every single profile I generate.


The problem:


On a profile with a macOS User-Agent:



WEBGL_debug_renderer_info → ANGLE (Apple, ANGLE Metal Renderer: Apple M4, Unspecified Version)<br>navigator.gpu.requestAdapter() → adapter.info.vendor → "intel"

WebGL says Apple. WebGPU says Intel. Same page, same instant.


The emulation covers WebGL and stops there. WebGPU hands over the real GPU of the physical machine.


Detecting this takes two lines:



javascript
<span><span><span>const</span> gl = document<span>.</span><span>createElement</span><span>(</span><span>'canvas'</span><span>).</span><span>getContext</span><span>(</span><span>'webgl'</span><span>);</span><br></span><span><span>const</span> dbg = gl<span>.</span><span>getExtension</span><span>(</span><span>'WEBGL_debug_renderer_info'</span><span>);</span><br></span><span><span>const</span> webglVendor = gl<span>.</span><span>getParameter</span><span>(</span><span>37445</span><span>);</span><br></span><span><span>const</span> adapter = <span>await</span> navigator<span>.</span>gpu<span>.</span><span>requestAdapter</span><span>();</span><br></span><span><span>// compare adapter.info.vendor against webglVendor</span></span></span>

This is not only a macOS problem. Any time the emulated WebGL doesn't match the machine's physical GPU, WebGPU gives it away. It just happens to be most obvious on macOS profiles, where the two can never match.


Questions:


  1. Does ZennoPoster emulate WebGPU at all — navigator.gpu, adapter.info, adapter.limits, adapter.features? If yes, is there a setting I'm missing?
  2. If not, is it planned?
  3. Until then, what's the recommended workaround? Is there an argument to disable WebGPU in the profile?
  4. And wouldn't disabling it be a signal of its own, since most real users have WebGPU enabled?

Has anyone else checked this on their profiles? I'd like to know if it's just my setup.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)