[tbb-dev] Disabling JITs in the Tor Browser
Matthew Finkel
sysrqb at torproject.org
Thu Aug 5 03:54:52 UTC 2021
On Thu, Aug 05, 2021 at 02:31:16AM +0000, sanketh wrote:
> Hello,
Hi Sanketh!
>
> Edge Vuln Research just dropped the amazing named "Super Duper Secure Mode"
> [1]---an interesting albeit slightly provocative statement they make in the
> announcement is that JITs may not be worth it for security-sensitive users,
> since they account for about half the bugs in V8 (Chromium's JS engine) and
> their new research shows that disabling JITs, despite the huge performance
> regressions in traditional JS benchmarks, is rarely noticeable in real-life.
> I don't think tbb is new to clamping down JS (for security-sensitive users),
> but this idea of disabling JITs might be interesting to look into*.
>
> First, taking a step back, recall that modern browsers execute JS by
> converting it into bytecode and then using an interpreter to execute, and
> functions that are "hot" (executed many times) are recompiled using a JIT to
> produce faster code. This is super simplified, see [2] for a more technical
> overview of how this works in Firefox.
>
> I think this idea can be used to improve the Tor Browser,
>
> 1. we can disable JITs in "Safer" mode which would reduce usability but
> improve security; and
Indeed, this is a good idea. Currently on Safer we disable:
- ion (optimizing JIT)
- baselinejit (Baseline JIT)
- wasm
// pref: Safest, Safer, Standard
"javascript.options.ion" : [, false, false, true ],
"javascript.options.baselinejit" : [, false, false, true ],
"javascript.options.wasm" : [, false, false, true ],
> 2. we can enable JS and disable JITs in "Safest" mode which would
> reduce significantly improve usability but degrade security.
On Safest, Javascript is disabled via NoScript (by injecting a CSP
header that disallows scripts). The interpreter has vulnerabilities
occasionally, but I don't remember any in recent history.
Some more details are in [5].
>
> On a more meta note, this wouldn't be hard to implement, Firefox has prefs
> to enable and disable this stuff, and @freddyb's tweet [3] seems to confirm
> this intuition.
>
> What do y'all think?
>
> Best,
> Sanketh
>
> *disabling JITs was discussed in the tor issue tracker 4 years ago [4] but
> most of the then concerns (like changing build settings) seem to have been
> resolved and JITs are now enabled across the browser (they were not enabled
> for content back then) and so this, I feel, can use fresh eyes.
>
> [1]: https://microsoftedge.github.io/edgevr/posts/Super-Duper-Secure-Mode/
> [2]:
> https://hacks.mozilla.org/2020/11/warp-improved-js-performance-in-firefox-83/
> [3]: https://twitter.com/freddyb/status/1423020386560712705?s=20
> [4]: https://gitlab.torproject.org/legacy/trac/-/issues/21011
[5] https://gitlab.torproject.org/tpo/applications/tor-launcher/-/issues/9387#note_2564351
More information about the tbb-dev
mailing list