Iframes in XSS, CSP and SOP
Iframes у XSS
Є 3 способи вказати вміст вбудованої сторінки:
Через
src
, вказуючи URL (URL може бути з різних джерел або з одного джерела)Через
src
, вказуючи вміст за допомогою протоколуdata:
Через
srcdoc
, вказуючи вміст
Доступ до змінних батьківського та дочірнього елементів
Якщо ви отримуєте доступ до попереднього html через http сервер (наприклад, python3 -m http.server
), ви помітите, що всі скрипти будуть виконані (оскільки немає CSP, що запобігає цьому). Батько не зможе отримати доступ до змінної secret
всередині будь-якого iframe і тільки iframes if2 & if3 (які вважаються однаковими сайтами) можуть отримати доступ до секрету у вихідному вікні.
Зверніть увагу, що if4 вважається мати null
походження.
Iframes з CSP
Зверніть увагу, що в наступних обхідних методах відповідь на сторінку, вбудовану в iframe, не містить жодного заголовка CSP, який запобігає виконанню JS.
Значення self
для script-src
не дозволить виконання JS-коду за допомогою протоколу data:
або атрибуту srcdoc
.
Однак навіть значення none
CSP дозволить виконання iframes, які вставляють URL (повний або лише шлях) в атрибут src
.
Отже, можливо обійти CSP сторінки за допомогою:
Зверніть увагу, що попередня CSP дозволяє виконання лише вбудованого скрипту.
Проте будуть виконані лише скрипти if1
та if2
, але лише if1
зможе отримати доступ до батьківського секрету.
Отже, можливо обійти CSP, якщо ви можете завантажити файл JS на сервер та завантажити його через iframe, навіть з script-src 'none'
. Це також потенційно можна зробити, зловживаючи точкою входу JSONP на тому ж сайті.
Ви можете протестувати це за допомогою наступного сценарію, де кукі вкрадено навіть з script-src 'none'
. Просто запустіть додаток та отримайте до нього доступ через свій браузер:
Інші Пейлоади, знайдені в дикій природі
Iframe sandbox
Вміст всередині iframe може бути підданий додатковим обмеженням за допомогою атрибута sandbox
. За замовчуванням цей атрибут не застосовується, що означає відсутність обмежень.
При використанні атрибута sandbox
накладаються кілька обмежень:
Вміст розглядається так, ніби він походить з унікального джерела.
Будь-яка спроба відправити форми блокується.
Виконання скриптів заборонено.
Доступ до певних API вимкнено.
Він запобігає посиланням взаємодіяти з іншими контекстами перегляду.
Використання плагінів через
<embed>
,<object>
,<applet>
або подібні теги не дозволяється.Навігація верхнього рівня контексту перегляду вмісту самим вмістом блокується.
Функції, які спрацьовують автоматично, наприклад відтворення відео або автоматичне фокусування елементів форми, блокуються.
Значення атрибута може бути залишено пустим (sandbox=""
), щоб застосувати всі вищезазначені обмеження. З альтернативи, його можна встановити як список значень, розділених пробілом, які звільняють iframe від певних обмежень.
Iframes в SOP
Перевірте наступні сторінки:
pageBypassing SOP with Iframes - 1pageBypassing SOP with Iframes - 2pageBlocking main page to steal postmessagepageSteal postmessage modifying iframe locationLast updated