Interdit l'utilisation de toutes les fonctions qui exécutent du code transmis sous forme de chaîne. Par exemple : eval, setTimeout, setInterval seront tous bloqués en raison du paramètre unsafe-eval
Tout contenu provenant de sources externes est également bloqué, y compris les images, le CSS, les WebSockets et, surtout, le JS
Via Text & Images
Il est observé que les navigateurs modernes convertissent les images et les textes en HTML pour améliorer leur affichage (par exemple, en définissant des arrière-plans, en les centrant, etc.). Par conséquent, si une image ou un fichier texte, tel que favicon.ico ou robots.txt, est ouvert via un iframe, il est rendu en HTML. Notamment, ces pages manquent souvent d'en-têtes CSP et peuvent ne pas inclure X-Frame-Options, permettant l'exécution de JavaScript arbitraire à partir d'elles :
De même, les réponses d'erreur, telles que les fichiers texte ou les images, viennent généralement sans en-têtes CSP et peuvent omettre X-Frame-Options. Les erreurs peuvent être induites à se charger dans un iframe, permettant les actions suivantes :
// Inducing an nginx errorframe=document.createElement("iframe");frame.src="/%2e%2e%2f";document.body.appendChild(frame);// Triggering an error with a long URLframe=document.createElement("iframe");frame.src="/"+"A".repeat(20000);document.body.appendChild(frame);// Generating an error via extensive cookiesfor(var i=0;i<5;i++){document.cookie=i+"="+"a".repeat(4000)};frame=document.createElement("iframe");frame.src="/";document.body.appendChild(frame);// Removal of cookies is crucial post-executionfor(var i=0;i<5;i++){document.cookie=i+"="}
Après avoir déclenché l'un des scénarios mentionnés, l'exécution de JavaScript dans l'iframe est réalisable comme suit :