Wpis z mikrobloga

Często korzystając z serwisów internetowych spotykamy się przekierowaniami.
Jeżeli część zasobów witryny dostępna jest tylko dla zalogowanych użytkowników - po przejściu na taką podstronę jako niezalogowana osoba jesteśmy, przekierowywani do formularza logowania.
W adresie URL możemy dostrzec parametry nazwane redirect czy też next, wskazujące na podstronę, która ma się wyświetlić po zalogowaniu.

Dzisiaj w #od0dopentestera, krótki przykład w #java symulujący tą funkcjonalność:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class RedirectionExample extends HttpServlet {
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {

response.sendRedirect(request.getParameter("redirect"));
}
}

Jako parametr redirect można podać dowolny link. Ale co w tym złego?

Zamiast przejść na nasza stronę, użytkownik zostanie przeniesiony na inną witrynę.

Żadne dane nie wyciekną.

Aby zrozumieć dlaczego jest to niebezpieczne musimy opisać co to jest phishing.

Phishing - czyli metoda oszustwa, w której podszywamy się pod kogoś lub coś aby wyłudzić jakieś interesujące nas informacje.

Przykład: dostajemy email od naszego banku, że ktoś próbował włamać się na nasze konto i musimy zmienić hasło.

Jako iż jesteśmy świadomi niebezpieczeństwa - sprawdzamy adres domeny, na którą kieruje odnośnik w wiadomości.

Domena się zgadza - jest identyczna z domeną naszego banku.

Klikamy więc w link i przystępujemy do procedury zmiany hasła.

Trafiamy jednak na stronę przestępców - którzy chcą wyłudzić nasze dane.

Jak do tego doszło?

Witryna banku zawierała błąd Open Redirection.

Atakujący w adresie banku zawarł odpowiednio spreparowany parametr redirect prowadzący na złośliwą domenę.

Użytkownik sprawdzając łącze – widział zatem prawdziwą domenę banku.

Nie sprawdził jednak parametrów, które były w niej przekazywane.

Dlatego też najpierw otworzyła mu się strona banku a następnie został przekierowany na inną domenę.

Pewno myślisz sobie, że żeby uchronić się przed tym atakiem, wystarczy sprawdzić, czy parametr zaczyna się od naszej domeny.

Dlaczego jest to błędne myślenie, dowiesz się w filmie, w którym opisuje kilka popularnych metod obrony oraz sposoby ich obejścia.

Jeżeli chcesz być wołany dodaj się do Mirkolisty. Wyjątkowo wołam osoby plusujące ostatni wpis o Java.

Masz pytanie na temat bezpieczeństwa? Zadaj je na grupie od 0 do pentestera na Facebooku.

#security #bezpieczenstwo #programowanie #informatyka #it #nauka #technologia #ciekawostki
KacperSzurek - Często korzystając z serwisów internetowych spotykamy się przekierowan...
  • 15
Pewno myślisz sobie, że żeby uchronić się przed tym atakiem, wystarczy sprawdzić, czy parametr zaczyna się od naszej domeny.


@KacperSzurek: Może wystarczy w ogóle nie dawać takiego parametru. Po co komuś na stronie opcja redirect na dowolną stronę? Spotkałeś sie z czymś takim?
@KacperSzurek @Koryntiusz: Mam przed sobą dokładnie taki kod i nie widzę powodu dlaczego miałbym dodawać tam jakikolwiek parametr. Używam przekierowania na określoną stronę konkretnego systemu. Jak rozumiem to tutaj frontend przekazuje na jaka stronę masz być przekierowany, po co?
@KacperSzurek:

Wykorzystanie Open Redirecta to phishingu jest tak absurdalnie naciąganym i nierealistycznym przypadkiem, że wielu ekspertów od bezpieczeństwa nie uważa tego za bład. Na przykład Google na stronach Bug Bounty wprost stwierdza, że dla nich nie jest to błąd i nie przyjmują zgłoszeń z Open Redirectami.

Open Redirect może być jedynie przydatny przy połączeniu z innymi blędami jak np. zostało opisane to tutaj.
@Koryntiusz:

Po co komuś na stronie opcja redirect na dowolną stronę? Spotkałeś sie z czymś takim?

Np. oauth2 przewiduje takie przekierowania. Zazwyczaj tego typu mechanizmy widuje się w elementach odpowiedzialnych za obsługę logowania i wylogowania użytkowników.
Wykorzystanie Open Redirecta to phishingu jest tak absurdalnie naciąganym i nierealistycznym przypadkiem,


@MDobak: niby tak, ale nie do końca

Phishing jest ogólnie dla ludzi nieuważnych, a niektórzy podadzą swoje dane jak im każesz wejść na http://okradne-cie.pl/ i będzie tam coś co przypomina Facebooka.

Sprawdzenie tego będzie nielegalne, ale dam sobie głowę uciąć, że open redirect na Google I dobra kampania przyniosłaby choć kilkaset kont dziennie
@Koryntiusz: To zależy od serwisu. Czasami będziesz przekierowywał użytkownika na konkretną podstronę - wtedy nie potrzebujesz przekazywać żadnych parametrów.
Na Wykopie ten parametr jest przekazywany - po zalogowaniu bowiem chcesz przenieść użytkownika do konkretnego wpisu, na którym był wcześniej.

@Gwozdziuuu: Trzymając się przykładu Wykopu. Załóżmy, że masz otwarte kilka stron Mirko jako niezalogowany użytkownik.
Nagle chcesz napisać komentarz - używasz wiec formularza logowania znajdującego się u góry każdej strony.
Pech
oauth2 przewiduje takie przekierowania.


@MDobak: pewnie zależy to od implementacji ale np. keycloak pozwala zrobić przekierowanie tylko na wcześniej zdefiniowane URIs albo tą samą domenę na której sam jest hostowany

@KacperSzurek: dzięki za wytłumaczenie. Faktycznie zachowanie flow może być trudne ale zależy to też od użytej technologii. Router w angularze np. pozwala odczytać skąd użytkownik przyszedł na stronę. Ten problem chyba bardziej dotyczy frameworkow generujących kod strony na serwerze jak