Cómo realizar un ataque de hombre en el medio usando los Service Workers de Javascript
La primera vez que me encontré con el concepto de Service Worker fue durante el Defcon CTF. En un desafío, tuvimos que registrar un Service Worker para interceptar el tráfico del usuario y desviarlo a nuestro servidor.
Este concepto sonaba interesante y peligroso, así que lo investigué y finalmente me di cuenta de que sería un buen tema para un artículo. Aquí hablaremos sobre el uso de service workers como un “hombre en el medio” (MitM) y si su aplicación es factible en el mundo real.
¿Qué son los Service Workers?
Por supuesto, tu primera pregunta probablemente sea “¿Qué es un Service Worker (trabajador de servicios)?” Las pautas para desarrolladores web de Google los describen de la siguiente manera:
“Un Service Workers es un proxy de red programable que te permite controlar cómo se administran las solicitudes de red desde tu página”.
¡Eso es básicamente! ¡Ya huele a MitM! Un Service Worker es un fragmento de código JavaScript que los desarrolladores pueden registrar y activar en su sitio web. Se ejecuta en segundo plano del navegador como un proxy y recibe todas las solicitudes bajo un cierto alcance. Además, el service worker administra y responde a las solicitudes.
Por ejemplo, puede enviar contenido subido desde la caché, reenviar la solicitud inicial para devolver la respuesta o incluso responder con un documento diferente. Para entenderlo, debes consultar el flujo de solicitud que aparece abajo.
El service worker se ejecuta independientemente de la aplicación web incluso cuando el sitio web correspondiente está cerrado. En algunos casos, el service worker incluso se ejecuta cuando el navegador está cerrado (por ejemplo, en Android).
Por lo tanto, los service workers se pueden utilizar para mejorar el rendimiento de una aplicación web. Además, pueden hacer que la aplicación esté completamente disponible sin conexión proporcionando contenido subido previamente mostrado desde la caché. Los service workers se ejecutan independientemente de las aplicaciones web. Por lo tanto, pueden recibir mensajes directamente desde el servidor y son la base de las API´s de notificación y envío.