Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
Ciekawy i banalny sposób na zresetowania hasła dowolnemu użytkownikowi w aplikacji webowej (tylko wtedy jeśli aplikacja jest podatna).
Błąd został zgłoszony w ramach konkretnego programu bug bounty. Nie ma tu zbyt wielu szczegółów, ale autor znaleziska wskazał na Twitterze, że całość wyglądała mniej więcej tak, jak luka zawarta w labie od Portswiggera. Zobaczmy więc jak wyglądała całość krok po kroku:
- Po zainicjowaniu resetu hasła, do użytkownika wysyłany był e-mailem losowy token resetu hasła (w linku) – na razie wszystko OK…
- Ale okazało się, że ten token jest generowany na podstawie czasu (hash generowany na podstawie czasu)
- A co jeśli by w tej samej sekundzie wysłać żądania resetu hasła dwóm użytkownikom (swojemu i ofierze)? W mailu do obu użytkowników przychodził ten sam reset-token tj. ten sam hash
- Po wykonaniu powyższego, wystarczyło tylko w żądaniu finalnego resetu hasła podmienić username na ten ofiary i już można było resetować jej hasło
Na Hackerone opis tematu jest dość enigmatyczny (ale na podstawie opisu powyżej już wiecie o co chodzi):
An account takeover vulnerability was present in the forgot password functionality(…) By sending carefully timed requests using a single-packet attack to the forgot-password path, an attacker is able to obtain the password reset token for any account on the platform. This attack requires only knowledge of the victim’s email address.
~Michał Sajdak
Ludzie dziś kończą pracę po ctrl+V
Że cooooooo
Widziałem też token na podstawie mejla. Więc zawsze ten sam xD
No to już idę wysyłać sobie te resety kij może trafię akurat na ten czas :) usera i hash.