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