Zamiana liter z dużych na…

Zamiana liter z dużych na małe to prosta operacja, no chyba, że korzystasz z UTF 8.
Czy może być niebezpieczna? #od0dopentestera
Czy słyszałeś o Unicode Case Mapping Collisions?
Przykład w #python

>>> 'ß'.upper()
'SS'

Jedna litera została zamieniona na dwie – a to może być niebezpieczne.
Sprawdźmy prostą funkcje resetowania hasła:

details = request.form
email = details['email']
cur = mysql.connection.cursor()
cur.execute("SELECT email from users WHERE email = %s", [email.lower()])
rv = cur.fetchall()
if len(rv) == 1:
return ("Wysyłam mail do {}".format(email))

Jeżeli zapomnisz hasła, podajesz je w formularzu.
System sprawdza czy taki rekord istnieje w bazie i wysyła kod służący do zmiany hasła na email.
Przed sprawdzeniem danych w bazie zamieniasz wszystkie litery na małe.
To sprawia, że niektóre znaki zostaną zamienione na ich odpowiedniki.
Chociażby symbol kelwin (K) zostanie zamieniony na literę (k).
Istnieje więcej takich kolizji.

Wtedy adres Kacperszurek@local.local (z symbolem kelwin) zostanie zamieniony na kacperszurek@local.local (ze zwykłą literą k).
Nasz podatny kod sprawdza dane w bazie po normalizacji (czyli po zamienieniu liter na ich małe odpowiedniki).
Zwróci więc jeden wynik – ponieważ w bazie istnieje adres pisany literami alfabetu łacińskiego.
Aplikacja wysyła jednak wiadomość pod adres podany przez użytkownika – czyli ten z symbolem kelwin.
Programista założył bowiem że adres podawany w formularzu i ten zwracany przez bazę będą identyczne.
Nie wiedział bowiem ze funkcja lower działa w specyficzny sposób na znakach UTF.

Jeżeli więc serwer local.local pozwala na tworzenie darmowych adresów email zawierających znaki UTF – może dojść do przejęcia czyjegoś konta użytkownika.
Na adres kacperszurek@local.local (ze zwykłą literą k) zostanie wysłany kod należący do użytkownika Kacperszurek@local.local (z symbolem kelwin).
Dokładnie taki błąd znaleziono na GitHub.

Subskrybuj kanał na YouTube
Masz pytanie na temat bezpieczeństwa? Zadaj je na grupie od 0 do pentestera na Facebooku.
Podcast o bezpieczeństwie dostępny na Google i Apple Podcasts oraz Spotify i Anchor.
Jeżeli chcesz być wołany dodaj się do Mirkolisty.

#bezpieczenstwo #programowanie #informatyka #it #nauka #technologia #ciekawostki #gruparatowaniapoziomu #biznes #webdev #security #javascript #it #programowanie #programista15k