Notificaciones push: el agente dormido que puede hackearte sin que lo notes
La amenaza silenciosa que pasa desapercibida
Las notificaciones push se han convertido en algo habitual en las aplicaciones web modernas. Las usamos para coordinar equipos, enviar alertas críticas o mantener informados a los usuarios. Pero esta misma funcionalidad puede convertirse en un canal de ataque persistente y difícil de detectar.
Cómo funciona la vulnerabilidad Sleeping Agent
El problema radica en una laguna del Web Push API. Los navegadores exigen que cada mensaje push muestre una notificación visible mediante userVisibleOnly: true. En teoría, esto protege al usuario. En la práctica, hay espacio para eludir esta protección.
Un Service Worker malicioso puede ejecutar dos acciones casi simultáneas:
- Mostrar la notificación con
showNotification() - Cerrarla inmediatamente con
notification.close()
El resultado es que la notificación existe solo en la base de datos interna del navegador durante una fracción de segundo. Cuando el navegador verifica el cumplimiento del requisito, consulta esa base de datos y no lo que el usuario realmente ve. La comprobación pasa. El usuario no ve nada. El canal de comunicación queda abierto sin que nadie se dé cuenta.
Por qué debería preocuparte
Esta vulnerabilidad no solo elude una configuración técnica. Rompe el modelo de confianza que sustenta toda la Push API:
- Persistencia silenciosa: Un atacante puede mantener un canal de comunicación activo después de que el usuario visite una sola vez una página comprometida. Sin instalar nada.
- Evasión de controles de compliance: Muchos marcos de cumplimiento dependen de las notificaciones visibles como frontera de seguridad. Esta técnica la elimina.
- Impacto en varios navegadores: Chrome, Edge y versiones anteriores de Safari se ven afectados.
- Facilidad de explotación: No se necesita código sofisticado. Se puede reproducir en minutos.
El detalle técnico
La vulnerabilidad se debe a que la validación del navegador ocurre después de que el Service Worker termina su ejecución. El navegador pregunta si hubo notificación, pero lo hace consultando la base de datos y permitiendo que la notificación ya cerrada pase la revisión.
Cómo proteger tus aplicaciones
Si usas push notifications en producción, considera estos pasos:
- Revisa los Service Workers de tus aplicaciones, especialmente si incluyen scripts de terceros. Un compromiso en esa capa puede abrirte esta vulnerabilidad.
- Implementa seguimiento de eventos de ciclo de vida de notificaciones. Los patrones anormales en
showNotification()yclose()pueden ser señales de alertas. - Valida criptográficamente el origen de los mensajes push. No acepta mensajes de fuentes desconocidas.
El panorama más amplio
Esta vulnerabilidad pone de manifiesto un problema recurrente en la seguridad web: la diferencia entre lo que dice la especificación y lo que realmente implementan los navegadores. La W3C indica que las notificaciones deben ser visibles, pero el mecanismo de control verifica lo falsable.
浏览器 vendors están trabajando en soluciones.