web-dev-qa-db-fra.com

Qu'est-ce que l'inclusion du script de site croisé (XSSI)?

J'ai récemment vu XSSI mentionné sur plusieurs pages, par ex. Exploits d'application Web et défenses :

Les navigateurs empêchent les pages d'un domaine de lire des pages d'autres domaines. Mais ils n'empêchent pas les pages d'un domaine de référencer des ressources dans d'autres domaines. En particulier, ils permettent aux images d'être rendus d'autres domaines et scripts à exécuter d'autres domaines. Un script inclus n'a pas son propre contexte de sécurité. Il circule dans le contexte de sécurité de la page qui incluait. Par exemple, si www.evil.example.com inclut un script hébergé sur www.google.com, alors que le script fonctionne dans le contexte diabolique non dans le contexte Google. Donc, toutes les données utilisateur dans ce script vont "fuir".

Je ne vois pas quel type de problèmes de sécurité cela crée dans la pratique. Je comprends XSS et XSRF mais XSSI est un peu mystérieux pour moi.

Quelqu'un peut-il dessiner une exploitement basé sur XSSI?

Merci

32
Pankrat

Ceci est généralement un problème si vous utilisez JSONP pour transférer des données. Considérons un site Web composé d'un domaine A qui charge des données de domaine B. L'utilisateur doit être authentifié sur le site A et B, et comme la même stratégie d'origine empêche les navigateurs plus anciens de communiquer directement avec un domaine différent (B) que la page actuelle. (A), les développeurs ont décidé d'utiliser JSONP. Donc, le site A comprend un script pointant vers http: //b/userdata.js Quelque chose comme:

displayMySecretData({"secret":"this is very secret", ...})

Donc, une fonction définie une fonction appelée displaymysecretdata, et lorsque le script fourni du serveur B fonctionne, il appelle cette fonction et affiche les données secrètes à l'utilisateur.

Maintenant, Wilver Server E vient. Il voit que A comprend des données de B utilisant JSONP. SO Server E comprend le même script, mais définit son propre displayMySecretData qui vole plutôt les données. L'attaquant tourne alors l'utilisateur à visiter son site. Lorsque l'utilisateur y va et qu'il est connecté à B, le navigateur envoie automatiquement les cookies d'authentification pour B ainsi que la demande à FecTH, le script de B. B voit un utilisateur authentifié et renvoie ainsi le script comme prévu. E obtient les données et PRESTO ...

Utilisation de JSONP pour charger des données confidentielles à partir d'un domaine différent de cette manière est donc vraiment non sécurisée, mais les gens l'utilisent toujours. Mauvaise idée.

45
Erlend

XSSI ne se limite pas aux réponses JSONP. Dans certains navigateurs, vous pouvez remplacer le constructeur de tableau. Si une réponse JSON contient [...] Et vous l'incluez comme un script, il exécutera le nouveau constructeur au lieu de l'encastrement. Le correctif consiste à insérer quelque chose dans la réponse qui ne peut pas être analysé comme ])}while(1);</x>, puis utilisez le code pour le supprimer avant de l'analyser. Un attaquant ne peut pas faire cela puisque l'inclusion du script est toujours l'ensemble du script.

Plus de détails sur le problème et cette solution à http://google-gruyere.appspot.com/part3#3__cross_site_script_inclusion

20
Vroo

XSSI est une façon fantaisie de dire: vous y compris dans votre programme, le code de quelqu'un d'autre; Vous n'avez aucun contrôle sur ce qui est dans ce code et vous n'avez aucun contrôle sur la sécurité du serveur sur lequel il est hébergé.

Par exemple, disons que j'inclus dans ma page HTML

<script type="text/javascript" src="http://mymatedave.com/js/coolwidget.js"></script>

Ce script fonctionnera dans ma webapp avec le même niveau de confiance que l'un de mon propre code JavaScript. Il aura accès au contenu complet de la page et au DOM, il sera en mesure de lire toutes les cookies de mon application et de lire les utilisateurs des touches et des mouvements de la souris, ainsi que tout ce que JavaScript puisse faire.

Si mon compagnon Dave, décide ensuite de mettre quelque chose de malveillant dans son widget cool (disons, un sniffer/keylogger qui envoie tous les cookies de l'utilisateur, formez des données et des touches à son serveur), je ne saurai pas nécessairement. En outre, la sécurité de mon application dépend maintenant de la sécurité du serveur de Dave. Si le serveur de Dave est compromis et coolwidget.js est remplacé par l'attaquant, je ne saurai pas nécessairement et le code malveillant fonctionnera dans le cadre de mon application.

7
Cheekysoft