Components.interfaces can be used to fingerprint browser user agent down to OS and minor version. This might not be a lot of data for fingerprinting (depending on how well we keep users upgraded), but it certainly is a concern for targeting exploit payloads against a particular OS and version combo.
Blocking and/or changing the attribute of this should be simple. Will of course need to be tested though. Also, some research on why a website might actually need this to function properly is probably a good plan.
Trac: Resolution: N/Ato fixed Actualpoints: N/Ato 1 Status: new to closed Summary: Block or mark Components.interfaces configurable to Block access to Components.interfaces from content script
In Mozilla bug 790732, Components.interfaces was converted to a "lazily-resolved shim". I was able to confirm that this shim code in ESR31 exactly matches the Components.interfaces object I observed in my demo in comment:11:
Moreover, a comment points out that the fix of 790732 resolved 429070 ("exposing Components.interfaces to untrusted content leaks information about installed extensions") because "...we only shim interfaces that expose DOM constants (see kInterfaceShimMap in nsDOMClassInfo.cpp), which is the same for everyone."
So assuming that's correct, I think we don't need to port this patch to ESR31. There is still the question of how to block Components.interfaces for the ESR24 branch of TB,
In Mozilla bug 790732, Components.interfaces was converted to a "lazily-resolved shim". I was able to confirm that this shim code in ESR31 exactly matches the Components.interfaces object I observed in my demo in comment:11:
Moreover, a comment points out that the fix of 790732 resolved 429070 ("exposing Components.interfaces to untrusted content leaks information about installed extensions") because "...we only shim interfaces that expose DOM constants (see kInterfaceShimMap in nsDOMClassInfo.cpp), which is the same for everyone."
So assuming that's correct, I think we don't need to port this patch to ESR31. There is still the question of how to block Components.interfaces for the ESR24 branch of TB.
Components.interfaces has a different set of properties in ESR31 and ESR24. So I've reconsidered, and I think it's cleaner if we remove the Components.interfaces object from both ESR24 and ESR31 branches. That way, Components.interfaces won't be a method for content scripts to distinguish different versions of TorBrowser. I'm attaching a patch here that removes Components.interfaces for ESR24, and I'll be providing a similar patch to ESR31 for #12620 (moved).
Trac: Keywords: N/Adeleted, MikePerry201408R added Status: reopened to needs_review