-
Notifications
You must be signed in to change notification settings - Fork 0
timezone problems #9
Description
I'm only going to talk about timezones in this issue - and whilst "dates" are used here, I'm not going to touch on the huge mountain of problems with dates you have (all your to*String etc patches don't even come close to fixing everything) which is for another day, if at all.
some of these [timezone problems] you cannot fix, and even if you didn't leak real values (mismatched values already show you are tampering), you are still leaking a tampering fingerprint
timezone name
- you didn't think about Temporal,. did you
⚠️ **you fail 2 of 3 tests**
i am in Iceland (via RFP == super robust, I know cuz I'm part of it) but spoofing as Tokyo
timezone offset
- this test is the current offset
- the control date is not a test, it's the date I expect you to return based on your timezonename
- not all tests are in here, just enough to prove the point, e.g. I am not using
getTimezoneOffset ⚠️ **you fail 6 of 8 tests** where you leak the real timezone offset and the other two are detected as known "lies" (underlined and faint grey)- I can definitively say what is a lie because the other methods you have no way to stop them leaking
- which allows me to return your actual real timezone offset to the fingerprint and what methods you lied about is also recorded in a separate fingerprint
timezone offsets
- this is a set of timezone offsets at specific points in time: 8 days is all that is needed to create (currently, in gecko) 339 unique hashes for all supported (and known) timezonenames
- ^ see https://arkenfox.github.io/TZP/tests/timezones.html - and hit
[ combine years] ⚠️ **you fail 8 of 9 tests** - 8 of them match expectedAtlantic/ReykjavikgetTimezoneOffsetdiffers because it has been tampered with
for this, and timezonename, I don't bother to determine which one is correct - so I don't record what methods are tampered with (which is a fingerprint) or return the real value - instead I just return "lies"
That said, it's not that hard to do (the logic can get a little messy so I haven't bothered, yet). The only reason I have this problem, is because I test so many methods. My point is, you can expect the real value to be recorded (given any script can do that)
timezone offsets - tokyo
this is the real tokyo (gecko ships with IANA tzdata)
here's your fake tokyo (IDK what you are using)
This creates several problems
⚠️ for many/most timezonenames, you are creating anadversarial fingerprint- i.ee9b05295does not exist in the real world⚠️ because of that, that fingerprint is "rare" - you are making people "unique" so to speak
- and depending on how/where you get your IANA tzdata from
⚠️ you need to be in sync with what ships in gecko, because changes happen all. the . time and fingerprints vary across firefox releases- I am not an extension developer, but surely everything you need is already there
prototype / proxy
I don't even need to test timezone etc to know that you could be tampering with it - here's what's directly exposed in the BoM (browser object model) and the specific things they failed
I scrolled down to the bottom, so the top is cut off - the cut off items are Date.getTimezoneOffset, Date.toDateString, Date.toLocaleDateString
- with the other 5 shown below, that's
⚠️ 8 APIs/functions tampered with, with specific test failures each - this is also a fingerprint (and is collected)
extension name leaked
🔥 see pic above
have fun trying to fix all of this (hint, you can't) :)
edit: typos