XSSI (Cross-Site Script Inclusion)

Support HackTricks

Basic Information

Cross-Site Script Inclusion (XSSI) je ranjivost koja proističe iz prirode script taga u HTML-u. Za razliku od većine resursa, koji podliježu Same-Origin Policy (SOP), skripte se mogu uključivati iz različitih domena. Ovo ponašanje je zamišljeno da olakša korišćenje biblioteka i drugih resursa hostovanih na različitim serverima, ali takođe uvodi potencijalni sigurnosni rizik.

Key Characteristics of XSSI:

  • Zaobilaženje SOP: Skripte su izuzete iz Same-Origin Policy, što im omogućava da se uključuju između domena.

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

  • Uticaj na dinamički JavaScript/JSONP: XSSI je posebno relevantan za dinamički JavaScript ili JSON with Padding (JSONP). Ove tehnologije često koriste informacije "ambient-authority" (kao što su kolačići) za autentifikaciju. Kada se zahteva skripta sa drugog hosta, ove akreditive (npr. kolačiće) automatski uključuju u zahtev.

  • Curjenje autentifikacionih tokena: Ako napadač može da prevari korisnikov pretraživač da zatraži skriptu sa servera koji kontroliše, može imati pristup osetljivim informacijama sadržanim u tim zahtevima.

Types

  1. Static JavaScript - Ovo predstavlja konvencionalni oblik XSSI.

  2. Static JavaScript with Authentication - Ova vrsta je posebna jer zahteva autentifikaciju za pristup.

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

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

The following information is a sumary of https://www.scip.ch/en/?labs.20160414. Check it for further details.

Regular XSSI

U ovom pristupu, privatne informacije su ugrađene unutar globalno dostupne JavaScript datoteke. Napadači mogu identifikovati ove datoteke koristeći metode kao što su čitanje datoteka, pretrage ključnih reči ili regularne izraze. Kada se lociraju, skripta koja sadrži privatne informacije može se uključiti u zlonamerni sadržaj, omogućavajući neovlašćen pristup osetljivim podacima. Primer tehnike eksploatacije je prikazan u nastavku:

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

Dynamic-JavaScript-based-XSSI and Authenticated-JavaScript-XSSI

Ove vrste XSSI napada uključuju poverljive informacije koje se dinamički dodaju u skriptu kao odgovor na korisnikov zahtev. 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 se može automatizovati korišćenjem alata kao što je DetectDynamicJS Burp ekstenzija.

Ako su poverljivi podaci pohranjeni u globalnoj promenljivoj, mogu se iskoristiti slične metode kao u Regular XSSI. Međutim, ako su poverljivi podaci uključeni u JSONP odgovor, napadači mogu preuzeti funkciju povratnog poziva kako bi dobili informacije. To se može uraditi ili manipulisanjem globalnim objektima ili postavljanjem funkcije koja će biti izvršena od strane JSONP odgovora, kao što je prikazano u nastavku:

<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 imenskom prostoru, prototype tampering se ponekad može iskoristiti. Ova tehnika koristi dizajn JavaScript-a, gde interpretacija koda uključuje prolazak kroz prototip lanac da bi se locirala pozvana svojstva. Predefinisanjem određenih funkcija, kao što je Array-ova slice, napadači mogu pristupiti i otkriti ne-globalne promenljive:

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

Dalje informacije o napadnim vektorima mogu se naći u radu istraživača bezbednosti Sebastian Lekies, koji održava listu vektora.

Non-Script-XSSI

Istraživanje Takeshija Terade uvodi još jedan oblik XSSI, gde se Non-Script datoteke, kao što su CSV, otkrivaju preko različitih domena tako što se uključuju kao izvori u script tag. Istorijski primeri XSSI, kao što su napad Jeremiah Grossmana iz 2006. godine za čitanje kompletnog Google adresara i curenje JSON podataka Joea Walkera iz 2007. godine, ističu ozbiljnost ovih pretnji. Pored toga, Gareth Heyes opisuje varijantu napada koja uključuje UTF-7 kodirani JSON kako bi se izbegao JSON format i izvršili skripti, što je 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>
Podržite HackTricks

Last updated