Co to jest Cross Site Script Inclusion (XSSI)?

Ostatnio widziałem xssi wspomniane na wielu stronach, np. exploity i zabezpieczenia aplikacji internetowych :

Przeglądarki uniemożliwiają stronom jednej domeny czytanie stron w innych domenach. Nie uniemożliwiają one jednak stronom domeny odwoływania się do zasobów w innych domenach. W szczególności pozwalają one na renderowanie obrazów z innych domen i wykonywanie skryptów z innych domen. Dołączony skrypt nie ma własnego kontekstu bezpieczeństwa. Działa w ochronie kontekst strony, która go zawierała. Na przykład, jeśli www.evil.example.com zawiera skrypt hostowany na www.google.com wtedy skrypt działa w złym kontekście, a nie w kontekście google. Więc wszelkie dane użytkownika w tym skrypcie " wyciekną."

Nie widzę, jakie problemy z bezpieczeństwem stwarza to w praktyce. Rozumiem XSS i XSRF ale XSSI jest dla mnie trochę tajemniczy.

Czy ktoś może szkicować exploita opartego na XSSI?

Thanks

Author: Pankrat, 2011-11-06

3 answers

Jest to zazwyczaj problem, jeśli używasz JSONP do przesyłania danych. Rozważmy stronę internetową składającą się z domeny a, która ładuje dane z domeny B. użytkownik musi być uwierzytelniony w witrynie A i B, a ponieważ ta sama polityka pochodzenia uniemożliwia starszym przeglądarkom bezpośrednią komunikację z inną domeną (B) niż bieżąca strona (a), programiści zdecydowali się użyć JSONP. Więc strona A zawiera skrypt wskazujący na http://B/userdata.js czyli coś w stylu:

displayMySecretData({"secret":"this is very secret", ...})

Więc A definiuje funkcję o nazwie displayMySecretData, a gdy dołączony skrypt z serwera B jest uruchomiony, wywołuje tę funkcję i wyświetla tajne dane użytkownikowi.

Teraz pojawia się zły serwer E. Widzi, że A zawiera dane z B za pomocą JSONP. Tak więc serwer E zawiera ten sam skrypt, ale definiuje swój własny displayMySecretData, który zamiast tego kradnie dane. Atakujący następnie nakłania użytkownika do odwiedzenia jego witryny. Gdy użytkownik idzie tam i jest zalogowany do B, przeglądarka automatycznie wysyła uwierzytelniające pliki cookie dla B wraz z żądaniem do fecth skrypt od B. B widzi uwierzytelnionego użytkownika, a tym samym zwraca skrypt zgodnie z oczekiwaniami. E dostaje Dane i presto...

Używanie JSONP do ładowania poufnych danych z innej domeny w ten sposób jest naprawdę niebezpieczne, ale ludzie nadal go używają. Zły pomysł.

 38
Author: Erlend,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-07 17:23:27

XSSI nie ogranicza się do odpowiedzi jsonp. W niektórych przeglądarkach można nadpisać konstruktor tablicy. Jeśli odpowiedź Json zawiera [...] i dołączysz ją jako skrypt, uruchomi ona nowy konstruktor zamiast wbudowanego. Poprawką jest wstawienie w odpowiedzi czegoś, czego nie można przetworzyć jak ])}while(1);</x>, a następnie użycie kodu do usunięcia tego przed przetworzeniem. Atakujący nie może tego zrobić, ponieważ włączenie skryptu to zawsze cały skrypt.

Więcej szczegółów na temat problemu i tego rozwiązania na http://google-gruyere.appspot.com/part3#3__cross_site_script_inclusion

 16
Author: Vroo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-02 04:20:26

XSSI jest wymyślnym sposobem na powiedzenie: włączasz do swojego programu, ktoś używa kodu; nie masz żadnej kontroli nad tym, co jest w tym kodzie, ani nie masz żadnej kontroli nad bezpieczeństwem serwera, na którym jest on hostowany.

Na przykład, załóżmy, że dołączam do mojej strony html

<script type="text/javascript" src="http://mymatedave.com/js/coolwidget.js"></script>

Że skrypt będzie działać w moim webapp z takim samym poziomem zaufania jak każdy z mojego własnego kodu javascript. Będzie miał dostęp do pełnej zawartości strony i DOM, będzie mógł przeczytać wszystkie moje pliki cookie aplikacji i odczyt naciśnięć klawiszy i ruchów myszy użytkowników, i wszystko inne, co javascript może zrobić.

Jeśli mój kolega dave, a następnie zdecyduje się umieścić coś złośliwego w swoim fajnym widżecie (powiedzmy, sniffer / keylogger, który wysyła wszystkie pliki cookie użytkownika, Dane formularza i naciśnięcia klawiszy na jego serwer) to niekoniecznie wiem. Ponadto, bezpieczeństwo mojej aplikacji zależy teraz od bezpieczeństwa serwera dave ' a. Jeśli serwer dave ' a zostanie naruszony i coolwidget.js jest zastąpiony przez napastnika, i znowu nie będzie koniecznie znać i złośliwy kod będzie działać jako część mojej aplikacji.

 7
Author: Cheekysoft,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-01 16:40:18