Odpowiedzi JSON mogą być wykorzystywane przez nadpisywanie konstruktorów Array lub jeśli wartości wrogie nie są znakami napisowymi JavaScript.Czy jest możliwe, aby XSS wykorzystywał odpowiedzi JSON z poprawnym łańcuchem JavaScript uciekającym
Załóżmy, że oba te wektory są adresowane w normalny sposób. Google znakomicie zatrzymuje odpowiedzi JSON bezpośredniego pozyskiwania poprzedzając cały JSON z czymś takim:
throw 1; < don't be evil' >
a potem reszta JSON obserwuje. Więc Dr Zło nie może, używając rodzaju exploit omawiane tutaj http://sla.ckers.org/forum/read.php?2,25788 uzyskać plik cookie (zakładając jesteś zalogowany) poprzez wprowadzenie następujących na swojej stronie:
<script src="http://yourbank.com/accountStatus.json">
Jak dla uciekającego reguły łańcucha, dobrze jeśli my” Ponownie używając podwójnych cudzysłowów, musimy poprzedzić każdym znakiem odwróconego ukośnika i każdego ukośnika odwrotnego kolejnym odwrotnym ukośnikiem itp.
Ale moje pytanie brzmi: co, jeśli robisz to wszystko?
Burpsuite (narzędzie do automatycznego wykrywania zabezpieczeń) wykrywa osadzone próby XSS, które są zwracane bez znaku UNHTML w odpowiedzi JSON, i zgłasza to jako lukę XSS. Mam raport, że moja aplikacja zawiera luki tego rodzaju, ale nie jestem przekonany. Próbowałem go i nie mogę zrobić exploita działa.
Więc nie sądzę, że to jest poprawne, ale pytam was StackOverflow społeczności, aby zważyć.
Jest jeden szczególny przypadek, że IE MIME typu wąchania, że myślę, że może doprowadzić do exploita . W końcu IE 7 wciąż miał "cechę", że tagi skryptów osadzone w komentarzach do obrazu zostały wykonane niezależnie od nagłówka Content-Type. Na początku zostawmy też na boku tak wyraźnie głupie zachowanie.
Z pewnością JSON byłby analizowany przez natywny parser JavaScript (Window.JSON w Firefox) lub przez eval() zgodnie ze starym domyślnym zachowaniem jQuery. W żadnym przypadku następujące wyrażenie nie spowoduje wykonania alertu:
{"myJSON": "legit", "someParam": "12345<script>alert(1)</script>"}
Czy mam rację, czy też się mylę?
OK, więc przypuszczam, że mogłem uczynić go jaśniejszym, ale odpowiedź JSON, o której mówię, jest określona przez obecność nagłówka Content-Type mającego wartość "application/json". Wygląda na to, że potwierdzasz, że nie ma żadnego exploita. Czy Twój kod nie może zostać wykorzystany przez bezpośrednie pozyskiwanie w wrogiej domenie, czyli za pomocą znacznika script i parametryzowanie źródła w celu uwzględnienia kodu, który następnie zostanie wykonany w kontekście domeny, z której pochodzi? W takim przypadku pliki cookie tej domeny byłyby dostępne i mogłyby zostać przechwycone przez stronę wywołującą za pomocą document.write. Dobrze? –
@Chris Mountford wstrzyknięty JavaScript nie jest wykonywany, ponieważ serwer nie informuje przeglądarki. Pomyśl o tym w ten sposób, co jeśli masz JavaScript w .exe? To * może prowadzić * Dom Based XSS, ale tak samo jak inne projekty. Domowe XSS wykonuje się z tymi samymi zasadami, z których jest wykonywane. Jedynym sposobem, który może być dla ciebie problemem, jest "eval()" wpisanie kodu w twojej własnej witrynie. – rook
Rozumiem, że JSON był eval() 'd bardzo często w przeszłości, przynajmniej domyślnie w jQuery (jak już wspomniałem). Jednak nie interesuje mnie iniekcja JavaScript, ale iniekcja HTML w JSON, która prowadzi do wykonania JavaScript. Czy możesz to skomentować? Ponadto, jak już powiedziałem, że IE tak niedawno, jak v7, które potwierdziłem, może IGNOROWAĆ nagłówek Content-Type w pewnych okolicznościach. Tak, jest to błąd w IE, ale Microsoft argumentował, że nie (niezależnie od RFC), a na koniec, ze względów bezpieczeństwa ma znaczenie tylko to, co przeglądarki nie robią, co mówi specyfikacja. –