Skip to content

timezone problems #9

@Thorin-Oakenpants

Description

@Thorin-Oakenpants

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 ⚠️ via prototype and proxy changes - ⚠️ in fact you are leaking the extension name

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

Image

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 expected Atlantic/Reykjavik
  • getTimezoneOffset differs 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)

Image

here's your fake tokyo (IDK what you are using)

Image

This creates several problems

  • ⚠️ for many/most timezonenames, you are creating an adversarial fingerprint - i.e e9b05295 does 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)
Image

extension name leaked

🔥 see pic above


have fun trying to fix all of this (hint, you can't) :)

edit: typos

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingenhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions