Closed
Bug 1491343
Opened 6 years ago
Closed 3 years ago
Time is incorrect when the instance is opened via about:profiles in another profile with privacy.resistFingerprinting enabled
Categories
(Core :: Security, defect, P3)
Core
Security
Tracking
()
RESOLVED
DUPLICATE
of bug 1709867
People
(Reporter: xeonchen, Unassigned)
References
(Blocks 1 open bug)
Details
(Whiteboard: [fingerprinting][fp-triaged])
User Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:60.0) Gecko/20100101 Firefox/60.0
Build ID: 20100101
Steps to reproduce:
0. make sure your computer's timezone is not in UTC+0
1. prepare 2 Firefox profiles:
* Profile-A set privacy.resistFingerprinting to true,
* Profile-B set privacy.resistFingerprinting to false.
2. open Firefox with Profile-A, browse to about:profiles
3. launch Profile-B from the tab opened in 2.
4. in Profile-B, open "web console" from web developer tools
5. execute |(new Date()).toLocaleString()| in the console opened in 4.
Actual results:
It shows UTC time.
Expected results:
Local time is expected.
Reporter | ||
Comment 1•6 years ago
|
||
Apparently the environment variable set in [1] is inherited in this case.
[1] https://searchfox.org/mozilla-central/rev/dd965445ec47fbf3cee566eff93b301666bda0e1/toolkit/components/resistfingerprinting/nsRFPService.cpp#833
Reporter | ||
Updated•6 years ago
|
Whiteboard: [fingerprinting]
Updated•6 years ago
|
Whiteboard: [fingerprinting] → [fingerprinting-breakage]
Comment 2•6 years ago
|
||
Tim, does this issue occur only in timezone spoofing? Do we use the same technique (setting environment variable) in any other fingerprinting protection mechanism?
Flags: needinfo?(tihuang)
Updated•6 years ago
|
Status: UNCONFIRMED → NEW
Ever confirmed: true
Priority: -- → P3
Comment 3•6 years ago
|
||
So far, the time zone spoofing is the only fingerprinting protection which is using the environment variable. In my opinion, we might be able to not rely on this way to spoof time zone. I think we can virtually change the timezone by directly spoofing js Date object. However, I don't know that whether the Date object is the only place reveals the time zone. If it is not, we need to find them all. Otherwise changing the environment variable is a safe approach that we can sure time zone will never be revealed.
What do you think, Arthur?
Flags: needinfo?(tihuang) → needinfo?(arthuredelstein)
Comment 4•6 years ago
|
||
Hi Tim -- I think patching JS instead might be a good idea. Change the env variable has unfortunate side effects on chrome code in general. Other places we would need to patch include:
* Intl.DateTimeFormat() [no locale argument]
reveals the locale by the way it formats dates and also via Intl.DateTimeFormat().resolvedOptions().timeZone
* Date/Time picker variants:
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/datetime-local
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/datetime
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/date
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/time
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/week
https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/month
It's important that we don't miss any other APIs! I guess a drawback of the JS API-patching approach is that we need to keep looking out for new APIs that might expose the timezone.
One other idea that occurs to me: could we apply the env variable to content processes only?
Flags: needinfo?(arthuredelstein)
Comment 5•6 years ago
|
||
I think we can only apply the env variable to content processes only and indeed it is a good idea. However, it will not work for the non-e10s mode. So, does Tor browser fully use e10s? If the answer is yes, then we can go this approach.
Flags: needinfo?(arthuredelstein)
Comment 6•6 years ago
|
||
I had forgotten that mobile does not use e10s.
Flags: needinfo?(arthuredelstein)
Reporter | ||
Updated•6 years ago
|
Assignee: nobody → xeonchen
Reporter | ||
Comment 7•6 years ago
|
||
There are two implementations of time API, one uses ICU and the other is not.
To update the time zone implementation with ICU can be overridden in [1], however the problem here is how to update when switching privacy.resistFingerprinting on and off since it cannot access preference directly within the file.
[1] https://searchfox.org/mozilla-central/rev/72b1e834f384a2ffec6eb4ce405fbd4b5e881109/js/src/builtin/intl/DateTimeFormat.js#253
Reporter | ||
Updated•6 years ago
|
Blocks: fingerprinting-breakage
Whiteboard: [fingerprinting-breakage] → [fingerprinting]
Updated•6 years ago
|
Assignee: xeonchen → nobody
Whiteboard: [fingerprinting] → [fingerprinting][fp-triaged]
Comment 8•6 years ago
|
||
however the problem here is how to update when switching privacy.resistFingerprinting on and off
I don't think this needs a new ticket (I am not an expert) but in a SINGLE profile... I can pick up on two issues with RFP & TZ spoofing when toggling the pref.
Test Site: https://ghacksuserjs.github.io/TorZillaPrint/TorZillaPrint.html#language
Assumption: Your real timezone is not UTC 0
Issue One: (when FF is started with RFP=true)
- set RFP = true
- restart browser
- load test: TZ spoof is effective
- set RFP = false
- click
[re-run tests]
: TZ spoof is still effective - expected results: TZ spoof should not be used
Issue Two: (when FF is started with RFP=false)
- set RFP = false
- restart browser
- load test: you will show your local time etc
- set RFP = true
- click
[re-run tests]
: TZ spoof is only partially effectiveIntl.DateTimeFormat
still shows local time (as seen in formatToParts)
- expected results: TZ spoof should cover Intl.DateTimeFormat
Is there any reason why Intl.DateTimeFormat
is not picked up on when turning the pref on (i.e was something missed, or is this a symptom of the bigger underlying issue re environment variable?)
Updated•3 years ago
|
Status: NEW → RESOLVED
Closed: 3 years ago
Resolution: --- → DUPLICATE
You need to log in
before you can comment on or make changes to this bug.
Description
•