Github: dla pewnych kont można było wysyłać e-maile z resetem hasła na… inne adresy mailowe

17 grudnia 2019, 14:04 | W biegu | komentarzy 7
: zin o bezpieczeństwie - pobierz w pdf/epub/mobi.

Ciekawy przykład, który w zasadzie może wystąpić w każdej aplikacji webowej. Otóż przy próbie resetu hasła, GitHub podany adres mailowy najpierw robił lowercase, a później porównywał z tym w bazie. W czym problem? W Unicode.

Przykład?

‚ß’.toLowerCase() // ‚ss’
‚ß’.toLowerCase() === ‚SS’.toLowerCase() // true
// Note the Turkish dotless i
‚John@Gıthub.com’.toUpperCase() === ‚John@Github.com’.toUpperCase()

Czyli jeśli założyłem sobie maila z np. tureckim i w nazwie, toLowerCase() normalizował to do zwykłego ‚i’. A następnie wysyłał maila z tokenem umożliwiającym reset hasła do oryginalnego maila.

Innymi słowy zakładam np. konto mıchal@popularna-domena.com i zgarniam token, który powinien dostać michal@popularna-domena.com. Przy waszych testach warto sprawdzić też triki typu: domena gmaıl.com, inne tego typu „dziwne” litery czy inne miejsca niż e-mail, w których możliwe jest użycie Unicode.

–ms

 

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. Tomasz21

    Ciekawy temat, i chyba nawet na czasie. Nasza kochana Poczta; i możliwość komunikowania się przez nią. Pan pośrednik, zaglądający przez ramię? Jest on, czy go niema? Jaka poczta jest najlepsza; w domyśle, najbezpieczniejsza?

    Odpowiedz
  2. juzek

    Problem jak zwykle w dającym raka Javascripcie. Mroczne czasy.

    Odpowiedz
    • Rafał

      Ale przecież „problem” jest w Unicode, a nie w danym języku programowania ;)

      Odpowiedz
    • Przecież GitHub jest napisany w Ruby…

      Odpowiedz
  3. Krzysiu

    Problem nie leży w Unicode, tylko w jego leniwej implementacji. https://en.wikipedia.org/wiki/Dotted_and_dotless_I#In_computing – Unicode jest projektowane tak, żeby tego typu znaki, mimo tego, że graficznie identyczne, miały inne kody. Problem z ß jest ten sam, ale leniwa interpretacja podobno dotyczy Chrome – testowałem kilka języków i przeglądarek (bez Chrome) i nie znalazłem takiej, która by przerabiała ß na ss. https://en.wikipedia.org/wiki/%C3%9F#Keyboards_and_encoding – problem interpretacji tym bardziej widać po tym, że Wasze ß już jest małą literą. W mojej przeglądarce ‚ẞ’.toLowerCase() === „ß”

    Odpowiedz
  4. Marcin

    Na te podatnosc nalozyl sie grzeszek Githubowcow – porownac, porownali, ale token wysylali na adres podany przez usera, a nie ten odnaleziony w bazie.

    Odpowiedz
  5. lcf

    nice one :]

    Odpowiedz

Odpowiedz