Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Za niekonwencjonalne użycie %00 otrzymał ~120 000 PLN nagrody w ramach bug bounty
Czasem prosta metoda daje dość spektakularne wyniki. Tak i było w tym przypadku.
Najpierw badacz próbował założyć konta z nietypowymi znakami w loginie (np. %00) – zakładając że może założy się admin%00, ale np. w trakcie umieszczania w bazie stosownego rekordu, feralne znaki zostaną jednak usunięte. Nic z tego, jednak założenie konta victim%00@domain.com skutkowało zwróceniem informacji typu: założyłeś konto z loginem: victimL@domain.com.
Losowa litera L? Niby tak choć np. taki login victim%00%00%00@domain.com dawał victimIdL@domain.com. Dalej losowo? Okazało się, że przy większej liczbie %00 badacz otrzymał całe bloki pamięci z serwera (loginy/hasła w plaintext, klucze RSA, …).
Istota problemu? Długość np. takiego stringu: abc%00 była kalkulowana jako 4, niby OK, ale przed momentem operacji na nim (tj. kopiowania) ciąg miał 3 bajty (%00 rzeczywiście było usuwane w trakcie wcześniejszej walidacji). Czwarty bajt był kopiowany z względnie losowego miejsca w pamięci. Więcej ciągów %00 – więcej losowych bajtów kopiowanych z pamięci.
Odosobniony przypadek? Niekoniecznie. Niedawno podobny bug zgłoszony był w mail.ru (z nagrodą $10 000).
Jeśli ktoś chciałby poznać więcej tego typu smaczków odsyłam również do naszej nowej książki o bezpieczeństwie aplikacji www.
–ms