diff --git a/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md b/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md index 987bf67a2..6ce6fe41b 100644 --- a/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md +++ b/src/pentesting-web/xss-cross-site-scripting/iframes-in-xss-and-csp.md @@ -61,7 +61,7 @@ alert(parent.secret) +content="script-src 'sha256-iF/bMbiFXal+AAl9tF8N6+KagNWdMlnhLqWkjAocLsk'" /> " if __name__ == "__main__": app.run() ``` -### Інші Payloads, знайдені в дикій природі +#### Нові (2023-2025) техніки обходу CSP з використанням iframe + +Дослідницька спільнота продовжує знаходити креативні способи зловживання iframe для подолання обмежувальних політик. Нижче ви можете знайти найбільш помітні техніки, опубліковані за останні кілька років: + +* **Dangling-markup / named-iframe data-exfiltration (PortSwigger 2023)** – Коли додаток відображає HTML, але сильний CSP блокує виконання скриптів, ви все ще можете витікати чутливі токени, інжектуючи *dangling* ` + + ``` ### Credentialless iframes Як пояснено в [this article](https://blog.slonser.info/posts/make-self-xss-great-again/), прапорець `credentialless` в iframe використовується для завантаження сторінки всередині iframe без відправки облікових даних у запиті, зберігаючи при цьому політику одного походження (SOP) завантаженої сторінки в iframe. -Це дозволяє iframe отримувати чутливу інформацію з іншого iframe в тому ж SOP, завантаженому на батьківській сторінці: +Оскільки **Chrome 110 (лютий 2023) ця функція увімкнена за замовчуванням** і специфікація стандартизована в різних браузерах під назвою *anonymous iframe*. MDN описує це як: “механізм для завантаження iframe третьої сторони в абсолютно нову, епhemeral storage partition, щоб жодні куки, localStorage або IndexedDB не ділилися з реальним походженням”. Наслідки для атакуючих і захисників: + +* Скрипти в різних credentialless iframes **все ще ділять одне й те саме верхнє походження** і можуть вільно взаємодіяти через DOM, що робить атаки multi-iframe self-XSS можливими (див. PoC нижче). +* Оскільки мережа **позбавлена облікових даних**, будь-який запит всередині iframe фактично поводиться як неавтентифікована сесія – захищені CSRF кінцеві точки зазвичай не проходять, але публічні сторінки, які можна витікати через DOM, все ще в межах досяжності. +* Вікна, що з'являються з credentialless iframe, отримують неявний `rel="noopener"`, що порушує деякі потоки OAuth. ```javascript -window.top[1].document.body.innerHTML = 'Hi from credentialless'; -alert(window.top[1].document.cookie); +// PoC: two same-origin credentialless iframes stealing cookies set by a third +window.top[1].document.cookie = 'foo=bar'; // write +alert(window.top[2].document.cookie); // read -> foo=bar ``` - Приклад експлуатації: Self-XSS + CSRF @@ -165,7 +209,7 @@ document.forms[0].submit(); - Інший iframe, в якому насправді користувач увійшов в систему (без прапора `credentialless`). -Тоді, з XSS, можливо отримати доступ до іншого iframe, оскільки вони мають одну і ту ж SOP, і вкрасти кукі, наприклад, виконавши: +Тоді, з XSS, можливо отримати доступ до іншого iframe, оскільки вони мають одну SOP, і вкрасти кукі, наприклад, виконавши: ```javascript alert(window.top[1].document.cookie); ``` @@ -201,4 +245,10 @@ fetchLater(req,{activateAfter: timeout}) ../postmessage-vulnerabilities/steal-postmessage-modifying-iframe-location.md {{#endref}} + + +## Посилання + +* [PortSwigger Research – Використання захоплення форм для обходу CSP (березень 2024)](https://portswigger.net/research/using-form-hijacking-to-bypass-csp) +* [Chrome Developers – Iframe без облікових даних: Легко вбудовувати iframes в середовища COEP (лютий 2023)](https://developer.chrome.com/blog/iframe-credentialless) {{#include ../../banners/hacktricks-training.md}}