Apply Resist Fingerprinting Protection to WebGL's readPixels method
Categories
(Core :: Graphics: CanvasWebGL, enhancement, P5)
Tracking
()
Tracking | Status | |
---|---|---|
firefox59 | --- | affected |
People
(Reporter: tjr, Unassigned)
References
(Depends on 1 open bug)
Details
(Whiteboard: [fingerprinting] [gfx-noted] [fp-triaged])
Comment 1•7 years ago
|
||
Updated•7 years ago
|
Comment 3•6 years ago
|
||
Reporter | ||
Comment 5•6 years ago
|
||
Reporter | ||
Updated•6 years ago
|
Updated•6 years ago
|
Comment 7•6 years ago
|
||
FWIW, Tor Browser 8.5.a* (not sure exactly which release) has starting enabling WebGL, but they block readPixels, so TB might like this at some stage (although I don't see it landing in ESR68?). Note, in [1] the error is output to increase entropy in results
[1] https://ghacksuserjs.github.io/TorZillaPrint/TorZillaPrint.html#canvas
8.0.*
getContext: 2d: supported, webgl: not supported, webgl2: not supported
[webgl] readPixels: webgl not supported
8.5a*
getContext: 2d: supported, webgl: supported, webgl2: supported
[webgl] readPixels: Error: Permission denied to access property "createBuffer"
[2] https://panopticlick.eff.org/
8.0.*
-00000000000000000000000000000000
8.5a*
-undetermined
Comment 8•6 years ago
|
||
While I realize that we should do something along the lines of the description of this bug, we move forward and just don't support readPixels() in RFP mode in Tor Browser for now:
Would that be something upliftable? Or should we treat it as a stopgap for us while we should try to get to a better solution for uplift than outright blocking readpPixels()?
Comment 9•6 years ago
|
||
My recommendation for Tor is to investigate software-only WebGL solutions as a holistic approach, but we can't ship that as a solution for our mainline Firefox users. Switching Windows to D3D-WARP is pretty easy, and I know MacOS has a software OpenGL driver, but I think it's in pretty poor shape. Bug 1286056 is for adding support for Swiftshader as a universal modern software WebGL fallback, so that's also something to keep an eye on.
There's no amount of noise you can add to ReadPixels that can thwart data exfil, and it's relatively easy to exfil the 4-5 bits of data that would identify the vendor*generation of device, by my estimates. I think we should drop that idea, unfortunately, since programmable shaders make calculation differences trivial to magnify.
I don't think you can even reasonably expect to prevent this exfil even if you disable ReadPixels (and similar) entirely, though maybe it's possible to reduce it to timing attacks.
There was a related investigation a while back to emulate minimum-precision restrictions in GLSL, but IIRC it was very expensive and might have been incomplete.
I think what's needed here is a more targeted approach, where we enumerate (and ideally proof-of-concept) fingerprinting bit leaks, and respond to them individually.
Updated•5 years ago
|
Updated•2 years ago
|
Description
•