Great. Do you still remember how you tested that, like did you make sure you disabled click-to-play protection for WebGL? Or did you just take a stock 8.5a10 and went to your website and noted the result?
Stock standard: I never play with the slider, as I'm looking for worst case scenarios. My test was fine (after that I just output the error message for possible better entropy): the difference was panopticlick - edit: https://trac.torproject.org/projects/tor/ticket/30537#comment:5 - since this test relates to that ticket: as I said there, it's no longer reproducable, so Panopticlick must have done some code changes
Stock standard: I never play with the slider, as I'm looking for worst case scenarios.
Okay, yes, going with the worst case scenario is a good idea. However, using the Tor Browser default was not the worst case scenario fingerprinting-wise which we support (however, I agree, it should have been). The worst case scenario here was someone allowing to run WebGL via click-to-play. That would have triggered this bug already as it is not a new one. In fact, Arthur has even pointed out that issue in https://bugzilla.mozilla.org/show_bug.cgi?id=1422890#c3 a while back.
This bug has a cautionary tale to tell (and hopefully some lessons for us to learn):
It's a bad idea to use the security slider for privacy means as it makes the result harder to analyze. I've been holding that opinion for a while now but this bug is a strong example for this problem: It seems in part we relied on WebGL being click-to-play to not escalate an underlying privacy issue (we did not even create a ticket for the readPixels() issue until yesterday). Tests until up to 8.5a11 showed we were good and then 8.5a11 adjusted the security settings for WebGL.
While we put the final fix out in an alpha which gave 4 weeks for finding this issue, that was not enough. There are tests like https://ghacksuserjs.github.io/TorZillaPrint/TorZillaPrint.html#canvas and folks are using those frequently, but we should be able to do better here by adding a respective test to our own test suite.
Trac: Cc: N/Ato acat, mcs, brade Priority: Medium to Very High Keywords: tbb-fingerprinting-os deleted, GeorgKoppen201905, TorBrowserTeam201905R added Status: new to needs_review
Also your test shows...webgl2: supported.. But webgl2 shouldn't be allowed.
Thanks. If the browser reports that webgl2 is supported, that's one bit of entropy. I'll double check with some tests and kkapsner (it's his code), opened an issue [1]. This is a browser level API check
What the browser does in a test after that can provide more entropy: e.g error entropy (e.g blocked at a different step of the process: e.g slider settings, click to play, extension interference, etc), or provide a hash
Not sure if meant the API check is flawed, or if TB blocks WebGL2.
Also your test shows...webgl2: supported.. But webgl2 shouldn't be allowed.
Thanks. If the browser reports that webgl2 is supported, that's one bit of entropy. I'll double check with some tests and kkapsner (it's his code), opened an issue [1]. This is a browser level API check
What the browser does in a test after that can provide more entropy: e.g error entropy (e.g blocked at a different step of the process: e.g slider settings, click to play, extension interference, etc), or provide a hash
Not sure if meant the API check is flawed, or if TB blocks WebGL2.
We explicitly set webgl.enable-webgl2 to false to make sure no WebGL2 APIs are accessible.
^^ just to be clear, the booleans of each are mismatched
webgl.disabled (false = enabled, true=disabled)
webgl.enable-webgl2(^^ the reverse)
I made sure to use the right combinations
Update: tested TB 32/64bit (8.5) and TBalpha (9.0a1) 32/64bit on Windows (all new vanilla setups), and cannot get webgl2 to say it is supported. This is at default settings. I cannot replicate the issue.
The patch from comment:5 looks correct and seems to work (we tested it on a macOS 10.13.6 system).
I don't know if this change will break a lot of WebGL sites; my hope is not too many.
Patch looks good to me too, tested on Linux. One small note: you could use nsContentUtils::ResistFingerprinting(aCallerType), which already has the aCallerType != CallerType::System check.
^^ just to be clear, the booleans of each are mismatched
webgl.disabled (false = enabled, true=disabled)
webgl.enable-webgl2(^^ the reverse)
I made sure to use the right combinations
Update: tested TB 32/64bit (8.5) and TBalpha (9.0a1) 32/64bit on Windows (all new vanilla setups), and cannot get webgl2 to say it is supported. This is at default settings. I cannot replicate the issue.
Use Windows 10 VM.
Patch looks good to me too, tested on Linux. One small note: you could use nsContentUtils::ResistFingerprinting(aCallerType), which already has the aCallerType != CallerType::System check.