[meta] WebExtensions can be used as user fingerprint
Categories
(WebExtensions :: General, enhancement, P3)
Tracking
(Not tracked)
People
(Reporter: iskander.sanchez, Unassigned)
References
(Depends on 3 open bugs, Blocks 1 open bug)
Details
(5 keywords, Whiteboard: [fingerprinting][fp-triaged])
Attachments
(1 file)
|
830 bytes,
text/html
|
Details |
Updated•9 years ago
|
Updated•9 years ago
|
Updated•9 years ago
|
Comment 1•9 years ago
|
||
Comment 2•9 years ago
|
||
Updated•9 years ago
|
Updated•9 years ago
|
Comment 3•9 years ago
|
||
Updated•9 years ago
|
Comment 4•9 years ago
|
||
Comment 5•9 years ago
|
||
Comment 6•9 years ago
|
||
Comment 7•9 years ago
|
||
Comment 8•9 years ago
|
||
Comment 9•9 years ago
|
||
Comment 10•9 years ago
|
||
Comment 11•9 years ago
|
||
Updated•9 years ago
|
Comment 12•9 years ago
|
||
Comment 13•9 years ago
|
||
Comment 14•9 years ago
|
||
Comment 15•9 years ago
|
||
Updated•9 years ago
|
Comment 16•9 years ago
|
||
Comment 17•9 years ago
|
||
Comment 18•9 years ago
|
||
Comment 19•9 years ago
|
||
Comment 20•9 years ago
|
||
Comment 21•9 years ago
|
||
Comment 22•9 years ago
|
||
Comment 23•9 years ago
|
||
Comment 24•9 years ago
|
||
Updated•9 years ago
|
Comment 25•9 years ago
|
||
Comment 26•9 years ago
|
||
Comment 27•9 years ago
|
||
Comment 28•9 years ago
|
||
Updated•8 years ago
|
Comment 29•8 years ago
|
||
Updated•8 years ago
|
Updated•8 years ago
|
Comment 30•8 years ago
|
||
Comment 31•8 years ago
|
||
Comment 32•8 years ago
|
||
Updated•8 years ago
|
Comment 33•8 years ago
|
||
Comment 34•8 years ago
|
||
Comment 35•8 years ago
|
||
Comment 36•8 years ago
|
||
Comment 37•8 years ago
|
||
Updated•8 years ago
|
Comment 38•8 years ago
|
||
Comment 39•8 years ago
|
||
Updated•8 years ago
|
Updated•8 years ago
|
Comment 40•8 years ago
|
||
Comment 41•8 years ago
|
||
Comment 42•8 years ago
|
||
Comment 43•8 years ago
|
||
Comment 44•8 years ago
|
||
Comment 45•8 years ago
|
||
Comment 46•8 years ago
|
||
Comment 47•8 years ago
|
||
Comment 48•8 years ago
|
||
Comment 49•8 years ago
|
||
Updated•7 years ago
|
Updated•7 years ago
|
Updated•7 years ago
|
Comment 50•7 years ago
|
||
We're going to convert this over to a meta and try to chip away at this over time.
Comment 51•6 years ago
|
||
any workaround?
Comment 52•5 years ago
|
||
Actually it is pretty difficult to not expose the UUID whenever you want to add any content to other websites.
Making it random makes it more difficult to probe for specific extensions and so trying to get an list of installed Add-ons. But if the random UUID is exposed this perfectly identifies this exact Firefox installation.
What do people think about this workaround until something better is found:
It should be possible to combine webRequest.onBeforeRequest and webRequest.filterResponseData to "fake" some host name, which then is used as the source for the contents you want to embed. This still allows websites to know that a specific Add-on is used, but at least does not expose some unique identifier which never changes until you uninstall and reinstall the Add-on.
I'm asking because I updated my Add-on https://addons.mozilla.org/android/addon/android-pdf-js/ to use "filterResponseData" to make it possible to view a PDF on Android while keeping the address to it in the address bar. This is absolutely cool. Feels like on Desktop where Firefox has this built in. But now I'm unsure if I should keep it this way or go back to my "old way" which was redirecting from the PDF address to the moz-extension:// URL. Way less cool but the redirect makes it actually impossible for the website to know that the redirect happened, as now the PDF viewer is a different origin and so no longer accessible from the original host.
| Comment hidden (offtopic) |
Comment 54•5 years ago
|
||
(In reply to Manuel Reimer from comment #52)
Actually it is pretty difficult to not expose the UUID whenever you want to add any content to other websites.
It's possible to insert content without exposing the UUID by using closed shadow DOM, see https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM
It should be possible to combine webRequest.onBeforeRequest and webRequest.filterResponseData to "fake" some host name, which then is used as the source for the contents you want to embed. This still allows websites to know that a specific Add-on is used, but at least does not expose some unique identifier which never changes until you uninstall and reinstall the Add-on.
I'm asking because I updated my Add-on https://addons.mozilla.org/android/addon/android-pdf-js/ to use "filterResponseData" to make it possible to view a PDF on Android while keeping the address to it in the address bar. This is absolutely cool. Feels like on Desktop where Firefox has this built in. But now I'm unsure if I should keep it this way or go back to my "old way" which was redirecting from the PDF address to the moz-extension:// URL. Way less cool but the redirect makes it actually impossible for the website to know that the redirect happened, as now the PDF viewer is a different origin and so no longer accessible from the original host.
You'll probably be interested in bug 1712096.
For your specific use case, bug 1457500 would be more appropriate.
(In reply to Manuel Reimer from comment #53)
I did some tries and while the embedded PDF.js in the desktop Firefox somehow is "a different origin" this does not work with "filterResponseData". Means that if I open a PDF in a new window, then I can access the content with my version but not on Desktop Firefox.
Can I somehow get the same with an WebExtension? Can I somehow mark my changed website as "protected" just as Firefox does it with PDF.js on the desktop version?
Generalizing the logic of PDF.js to an extension API is not something that's actively being worked on, but it would be covered by bug 1457500.
PS. Please stop commenting on this bug about your extension; it's unrelated to the topic of the bug and results in bugmail to many people.
Comment 55•5 years ago
|
||
(In reply to Rob Wu [:robwu] from comment #54)
It's possible to insert content without exposing the UUID by using closed shadow DOM, see https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM
I have heard that the closed shadow DOM is not a security boundary. That is, even if the closed shadow DOM "leaks" the shadow DOM content, it would not be considered as a security vulnerability. So I had to resort to cross-origin iframe. Is that changed?
Comment 56•5 years ago
|
||
(In reply to Masatoshi Kimura [:emk] from comment #55)
(In reply to Rob Wu [:robwu] from comment #54)
It's possible to insert content without exposing the UUID by using closed shadow DOM, see https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_shadow_DOM
I have heard that the closed shadow DOM is not a security boundary. That is, even if the closed shadow DOM "leaks" the shadow DOM content, it would not be considered as a security vulnerability. So I had to resort to cross-origin
iframe. Is that changed?
(Closed) shadow DOM does NOT provide full isolation, and it's very easy to inadvertently leak references to its content. Extensions have access to an execution environment isolated from the web page (content scripts), which enables them to load a subresource (e.g. moz-extension:-frame) in a shadow tree, without inadvertently leaking the extension URL. If you have a counter-example that shows a leak of the UUID under this construction, please let me know and I'll stop mentioning this option.
Comment 57•4 years ago
|
||
This issue becomes much more relevant when these UUIDs can be discovered by a Spectre-attacker enumerating a content process' address space. Making the UUIDs unique-per-session would help a lot, but that's still not ideal.
Comment 58•4 years ago
|
||
(In reply to Tom Ritter [:tjr] from comment #57)
This issue becomes much more relevant when these UUIDs can be discovered by a Spectre-attacker enumerating a content process' address space. Making the UUIDs unique-per-session would help a lot, but that's still not ideal.
I wonder how much we can realistically mitigate fingerprinting with spectre... We have enough identifying information in the content process as it is, and when extensions are involved, I'd expect a lot of them to send identifying information of their own.
In any case, I'm not sure we can realistically change this at this point. It was hard enough to get developers to use APIs to get their base URL rather than hard coding it as they had been used to under Chrome. But I know for a fact that there are extensions that generate HTML for their UI and cache it across sessions (I have at least seen TreeStyleTab doing it), and if their base URL changes, I'm sure that some of that HTML will break.
Updated•4 years ago
|
Updated•3 years ago
|
Updated•3 years ago
|
Updated•3 years ago
|
Updated•2 years ago
|
Updated•6 months ago
|
Description
•