Aktywne Wpisy
vikop-ru +1023
Ryneczek +92
Bajkopisarz Stanowski znowu dał do wiwatu ku uciesze mało zorientowanej gawędzi. Nie wiem, ile lat ma przeciętny widz kanału sportowego, ale warto kilka rzeczy przypomnieć.
Tomasz Smokowski ma 50 lat. Przez 22 lata był twarzą Canal+. 4 piłkarskie Oscary za najlepszego komentatora piłkarskiego, cała piłkarka Polska znała duet Smokowski&Twarowski i prowadzony przez nich program Liga+Extra. Potem była jeszcze Liga Mistrzów na Polsacie i dyrektorstwo w NC+. W skrócie; mamy do czynienia z
Tomasz Smokowski ma 50 lat. Przez 22 lata był twarzą Canal+. 4 piłkarskie Oscary za najlepszego komentatora piłkarskiego, cała piłkarka Polska znała duet Smokowski&Twarowski i prowadzony przez nich program Liga+Extra. Potem była jeszcze Liga Mistrzów na Polsacie i dyrektorstwo w NC+. W skrócie; mamy do czynienia z
Dawniej, aby na stronie treści pojawiały się w czasie rzeczywistym należało z poziomu #javascript co kilka sekund wysyłać żądanie do serwera.
Teraz do tego celu wykorzystuje się websockety.
@ServerEndpoint(value="/endpoint")
public class socketer {
@OnMessage
public void onMessage(String message, Session session) {
session.getBasicRemote().sendText("tajny socket:"+message);
}
}
Jeżeli coś pojawi się na websockecie - odsyłam tą treść do użytkownika dodając do niej tekst.
Równocześnie mamy stronę, która próbuje się połączyć z endpointem.
var w = new WebSocket('ws://dobradomena.local/endpoint');
w.onmmessage = function(e) {
alert(e.data);
};
w.onopen = function(e) {
w.send('Hej!');
};
Jak działa taka komunikacja?
Nasza strona wysyła żądanie HTTP, w którym informuje, że chce przejść na websockety.
W odpowiedzi, serwer zwraca kod 101 i od tego momentu komunikacja odbywa się na podstawie ramek.
Gdzie jest błąd?
Aby uprościć przykład - nie jest w nim widoczna żadna metoda autoryzacji.
Załóżmy więc, że aby połączyć się z endpointem użytkownik musi posiadać prawidłowe ciasteczko.
Skopiujmy teraz nasz kod i umieśćmy go na innej domenie.
Tam również będzie działał prawidłowo. Dlaczego?
W kodzie #js odnosimy się do dobrejdomeny.
Podczas inicjalizacji połączenia z websocketem najpierw wysyłane jest żądanie HTTP.
Przeglądarka widząc więc
dobradomena.local
dołączyła do niej pasujące ciasteczko.Serwer sprawdził ciasteczko i zwrócił odpowiedni socket.
Tym samym zła domena może odczytywać oraz zapisywać do niego dowolne dane.
Atakujący nie musiał posiadać hasła użytkownika.
Wystarczy, że atakowana osoba była wcześniej zalogowana.
Jak zatem uchronić się przed tym atakiem?
Przeglądarka do żądań dodaje również nagłówek
origin
, w którym zawiera nazwę domeny, od której pochodzi dane zapytanie.Możemy zatem sprawdzać jego treść po stronie serwera - i weryfikować czy żądanie pochodzi z naszej witryny.
Wtedy - nawet jeżeli ciasteczko jest prawidłowe - a żądanie pochodzi z obcej domeny - będziemy je w stanie rozpoznać.
Jeżeli chcesz być wołany dodaj się do Mirkolisty.
Masz pytanie na temat bezpieczeństwa? Zadaj je na grupie od 0 do pentestera na Facebooku.
Ps. Zapraszam do obserwowania tagu autorskiego #od0dopentestera
#security #bezpieczenstwo #programowanie #informatyka #it #nauka #technologia #ciekawostki #hacking #gruparatowaniapoziomu
Możesz zapisać/wypisać się klikając na nazwę listy.
Sponsor: Grupa Facebookowa z promocjami z chińskich sklepów
Masz problem z działaniem listy? A może pytanie? Pisz do IrvinTalvanen
! @KacperSzurek @Mashe @UrimTumim @porque @NERP @Smevios @Jakplus @Pioneer95 @ThatPart @szczeppan @Zielarz25 @press2210 @Dorrek @hiroszi @jerekp @Dyktus @bovver91 @Campell @ghostd @heow @Bakanany @znow_nowy_nick @arais_siara @Pies_Benek @HeinzDundersztyc @johnyboy @MojeTrzecieKonto
@KacperSzurek: Co z żadaniami nie wysłanymi z przeglądarki ale z programu gdzie możemy spreparować header origin?
Tutaj chodzi o to, że jeżeli jesteś zalogowany na serwisie A i ktoś przekona Cię do przejścia na serwis B – to wtedy atakujący może połączyć się z serwisem A jako Ty – nie znając Twojego loginu, hasła oraz ciasteczka. Wystarczy tylko że klikniesz w link do