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).

12 lipca 2024, 21:16 | W biegu | komentarze 4

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

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



Komentarze

  1. Urypajew

    Ludzie dziś kończą pracę po ctrl+V

    Odpowiedz
  2. Piotr

    Widziałem też token na podstawie mejla. Więc zawsze ten sam xD

    Odpowiedz
  3. Spamer

    No to już idę wysyłać sobie te resety kij może trafię akurat na ten czas :) usera i hash.

    Odpowiedz

Odpowiedz