XSSI (Cross-Site Script Inclusion)

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Osnovne informacije

Uključivanje skripti sa različitih sajtova (XSSI) je ranjivost koja proizilazi iz prirode script oznake u HTML-u. Za razliku od većine resursa koji su podložni Same-Origin Policy (SOP), skripte se mogu uključiti sa različitih domena. Ovo ponašanje je namenjeno da olakša korišćenje biblioteka i drugih resursa smeštenih na različitim serverima, ali takođe uvodi potencijalni sigurnosni rizik.

Ključne karakteristike XSSI:

  • Bypass SOP-a: Skripte su izuzete iz Same-Origin Policy, što im omogućava da se uključe sa različitih domena.

  • Izlaganje podataka: Napadač može iskoristiti ovo ponašanje da pročita podatke učitane putem script oznake.

  • Utjecaj na dinamički JavaScript/JSONP: XSSI je posebno relevantan za dinamički JavaScript ili JSON sa Padding-om (JSONP). Ove tehnologije često koriste "ambient-authority" informacije (poput kolačića) za autentifikaciju. Kada se zahtev za skriptu napravi ka drugom hostu, ove akreditive (npr. kolačiće) automatski uključuje u zahtev.

  • Curenje autentifikacijskog tokena: Ako napadač može prevariti korisnikov pregledač da zatraži skriptu sa servera koji kontroliše, može imati pristup osetljivim informacijama sadržanim u tim zahtevima.

Tipovi

  1. Statički JavaScript - Ovo predstavlja konvencionalnu formu XSSI.

  2. Statički JavaScript sa autentifikacijom - Ovaj tip je poseban jer zahteva autentifikaciju za pristup.

  3. Dinamički JavaScript - Uključuje JavaScript koji dinamički generiše sadržaj.

  4. Non-JavaScript - Odosi se na ranjivosti koje ne uključuju JavaScript direktno.

Sledeće informacije su sažetak https://www.scip.ch/en/?labs.20160414. Proverite ga za daljnje detalje.

Regularni XSSI

U ovom pristupu, privatne informacije su ugrađene u globalno dostupnu JavaScript datoteku. Napadači mogu identifikovati ove datoteke koristeći metode poput čitanja datoteka, pretrage ključnih reči ili redovnih izraza. Nakon pronalaska, skripta koja sadrži privatne informacije može biti uključena u zlonamerni sadržaj, omogućavajući neovlašćeni pristup osetljivim podacima. Primer tehnike iskorišćavanja je prikazan u nastavku:

<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script> alert(JSON.stringify(confidential_keys[0])); </script>

Dinamički-JavaScript-XSSI i Autentifikovani-JavaScript-XSSI

Ovi tipovi XSSI napada uključuju poverljive informacije koje se dinamički dodaju skripti kao odgovor na zahtev korisnika. Detekcija se može izvršiti slanjem zahteva sa i bez kolačića i upoređivanjem odgovora. Ako se informacije razlikuju, to može ukazivati na prisustvo poverljivih informacija. Ovaj proces može biti automatizovan korišćenjem alata poput DetectDynamicJS Burp ekstenzije.

Ako se poverljivi podaci čuvaju u globalnoj promenljivoj, mogu biti iskorišćeni korišćenjem sličnih metoda kao i kod Regular XSSI. Međutim, ako se poverljivi podaci uključuju u JSONP odgovor, napadači mogu preuzeti kontrolu nad povratnom funkcijom kako bi dobili informacije. Ovo se može postići manipulacijom globalnih objekata ili postavljanjem funkcije koja će biti izvršena od strane JSONP odgovora, kao što je prikazano u primeru ispod:

<script>
var angular = function () { return 1; };
angular.callbacks = function () { return 1; };
angular.callbacks._7 = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=angular.callbacks._7" type="text/javascript"></script>
<script>
leak = function (leaked) {
alert(JSON.stringify(leaked));
};
</script>
<script src="https://site.tld/p?jsonp=leak" type="text/javascript"></script>

Za promenljive koje se ne nalaze u globalnom prostoru imena, ponekad se može iskoristiti manipulacija prototipom. Ova tehnika koristi dizajn JavaScript-a, gde interpretacija koda uključuje pretragu prototipskog lanca radi pronalaženja pozvane osobine. Preuzimanjem određenih funkcija, kao što je slice za Array, napadači mogu pristupiti i otkriti promenljive koje nisu globalne:

Array.prototype.slice = function(){
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this);
};

Dodatne detalje o vektorima napada možete pronaći u radu istraživača za bezbednost Sebastijana Lekisa, koji održava listu vektora.

Non-Script-XSSI

Istraživanje Takeshi Terade uvodi još jedan oblik XSSI, gde se ne-skript fajlovi, poput CSV-a, curenjem preko izvora uključuju u script tag. Istorija primera XSSI, poput napada Džeremaje Grousmena 2006. godine za čitanje kompletnog Google adresara i Džoa Vokera 2007. godine za curenje JSON podataka, ističu ozbiljnost ovih pretnji. Dodatno, Gareth Hejs opisuje varijantu napada koja uključuje UTF-7 enkodirani JSON za izbegavanje JSON formata i izvršavanje skripti, efikasno u određenim pregledačima:

[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated