Abusing Service Workers
Основна інформація
Службовий працівник — це скрипт, який виконується вашим браузером у фоновому режимі, окремо від будь-якої веб-сторінки, що дозволяє використовувати функції, які не потребують веб-сторінки або взаємодії з користувачем, тим самим покращуючи можливості офлайн-роботи та фонової обробки. Докладну інформацію про службових працівників можна знайти тут. Зловмисники можуть отримати контроль над взаємодією жертви з усіма сторінками в межах цього домену, експлуатуючи службових працівників у вразливому веб-домені.
Перевірка наявних службових працівників
Існуючі службові працівники можуть бути перевірені в розділі Службові працівники вкладки Застосунок у Інструментах розробника. Інший метод — відвідати chrome://serviceworker-internals для більш детального перегляду.
Push-сповіщення
Дозволи на push-сповіщення безпосередньо впливають на здатність службового працівника спілкуватися з сервером без прямої взаємодії з користувачем. Якщо дозволи відхилені, це обмежує потенціал службового працівника становити постійну загрозу. Навпаки, надання дозволів підвищує ризики безпеки, дозволяючи отримувати та виконувати потенційні експлойти.
Атака створення службового працівника
Щоб експлуатувати цю вразливість, вам потрібно знайти:
Спосіб завантажити довільні JS файли на сервер і XSS для завантаження службового працівника завантаженого JS файлу
Вразливий JSONP запит, де ви можете маніпулювати виходом (з довільним JS кодом) і XSS для завантаження JSONP з корисним навантаженням, яке завантажить шкідливого службового працівника.
У наступному прикладі я збираюся представити код для реєстрації нового службового працівника, який буде слухати подію fetch
і надсилати на сервер зловмисника кожну отриману URL-адресу (це код, який вам потрібно завантажити на сервер або завантажити через вразливу JSONP відповідь):
І це код, який зареєструє робітника (код, який ви повинні мати можливість виконати, зловживаючи XSS). У цьому випадку GET запит буде надіслано на сервер зловмисника, повідомляючи, чи була реєстрація служби робітника успішною чи ні:
У випадку зловживання вразливим JSONP кінцевим пунктом ви повинні помістити значення всередину var sw
. Наприклад:
Є C2, присвячений експлуатації Service Workers, під назвою Shadow Workers, який буде дуже корисним для зловживання цими вразливостями.
Директива кешу на 24 години обмежує термін дії шкідливого або скомпрометованого service worker (SW) максимум 24 години після виправлення вразливості XSS, за умови онлайн-статусу клієнта. Щоб мінімізувати вразливість, оператори сайтів можуть знизити час життя (TTL) скрипта SW. Розробникам також рекомендується створити kill-switch для service worker для швидкої деактивації.
Зловживання importScripts
у SW через DOM Clobbering
importScripts
у SW через DOM ClobberingФункція importScripts
, викликана з Service Worker, може імпортувати скрипт з іншого домену. Якщо ця функція викликається з використанням параметра, який зловмисник міг би змінити, він зможе імпортувати JS-скрипт зі свого домену і отримати XSS.
Це навіть обходить захист CSP.
Приклад вразливого коду:
index.html
sw.js
З DOM Clobbering
Для отримання додаткової інформації про те, що таке DOM Clobbering, перегляньте:
Dom ClobberingЯкщо URL/домен, який SW використовує для виклику importScripts
, знаходиться всередині HTML-елемента, можливо модифікувати його через DOM Clobbering, щоб змусити SW завантажити скрипт з вашого власного домену.
Для прикладу цього перегляньте посилання на довідку.
Посилання
Last updated