Closed Bug 1941847 Opened 1 year ago Closed 1 year ago

Gecko reveals more GPU Hardware Information than Webkit/chromium

Categories

(Core :: Graphics: CanvasWebGL, defect)

defect

Tracking

()

RESOLVED DUPLICATE of bug 1916271

People

(Reporter: fazim.pentester, Unassigned)

Details

(Keywords: reporter-external, Whiteboard: [client-bounty-form][fingerprinting])

Attachments

(2 files)

Attached file gpu-leak.html

Using the proof of concept below, the Firefox browser may unintentionally leak a user's GPU information when visiting a site.

Steps to reproduce:

  1. Download gpu-leak.html.
  2. Visit the gpu-leak.html page on the latest Firefox browser.
  3. Observe that the user's GPU information is displayed on the visited site.
Flags: sec-bounty?
Attached image poc.png

Looks like these are canvas WebGL parameters. Tom, maybe this is a known issue?

Group: firefox-core-security → gfx-core-security
Component: Security → Graphics: CanvasWebGL
Flags: needinfo?(tom)
Product: Firefox → Core

We mask the renderer string, the details provided do not actually correspond directly to the user's hardware they are merely indicative. Therefore this bug is INVALID. However I am curious about Chrome's behavior and not reporting any information at all...

Group: gfx-core-security
Status: NEW → RESOLVED
Closed: 1 year ago
Flags: needinfo?(tom)
Resolution: --- → INVALID
Whiteboard: [client-bounty-form] → [client-bounty-form][fingerprinting]

We sanitize while they hardcode it completely GL_RENDERER and GL_VENDOR from blink

Flags: sec-bounty? → sec-bounty-
Duplicate of bug: 1916271
Resolution: INVALID → DUPLICATE
Summary: Unintentional GPU Hardware Information Disclosure → Gecko reveals more GPU Hardware Information than Webkit/chromium

I also want to note that we also spoof unmasked values too. For example running the following code

const canvas = document.createElement("canvas");
const gl = canvas.getContext("webgl");

const debugInfo = gl.getExtension("WEBGL_debug_renderer_info");
const vendor = gl.getParameter(debugInfo.UNMASKED_VENDOR_WEBGL);
const renderer = gl.getParameter(debugInfo.UNMASKED_RENDERER_WEBGL);

console.log(vendor);
console.log(renderer);

Produces the following on Firefox

> Apple
> Apple M1, or similar

Produces the following on Chrome

> Google Inc. (Apple)
> ANGLE (Apple, ANGLE Metal Renderer: Apple M3 Pro, Unspecified Version)
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: