Notifications Push : le nouveau cheval de Troie silencieux
La menace silencieuse que personne ne voit venir
Les notifications push font désormais partie du quotidien des applications web. Elles servent aux outils de collaboration en temps réel comme aux systèmes d’alerte critique. Mais que se passe-t-il quand le mécanisme censé informer les utilisateurs devient une porte d’entrée pour des attaques invisibles et persistantes ?
C’est le cas de la faille Sleeping Agent. Elle exploite un décalage temporel dans la façon dont les navigateurs appliquent les règles de sécurité de l’API Web Push.
Comprendre la surface d’attaque
L’API Web Push contient une protection importante : userVisibleOnly: true. Cette option devrait garantir qu’un message push déclenche toujours une notification visible pour l’utilisateur.
Dans la pratique, cette protection est contournable.
Un Service Worker malveillant reçoit un événement push et enchaîne deux appels API en quelques millisecondes :
showNotification()affiche la notificationnotification.close()la ferme aussitôt
La notification passe dans la base de données interne du navigateur pendant une fraction de seconde, puis disparaît. Or, le contrôle de sécurité du navigateur consulte cette base plutôt que l’écran réel. Le résultat est simple : le navigateur pense que la notification a été affichée, mais l’utilisateur ne voit rien. Le canal de commande reste actif et invisible.
Pourquoi cette attaque est inquiétante
Elle ne contourne pas seulement une option. Elle affaiblit le modèle de confiance de l’API Push dans son ensemble.
- Persistance silencieuse : un attaquant peut établir une communication durable sans que l’utilisateur en ait conscience. Il suffit d’une seule visite sur un site compromis.
- Contournement de conformité : les normes de sécurité s’appuient sur la Sichtbarkeit des notifications. Cette attaque les rend caduques.
- Impact multi-navigateurs : Chrome, Edge et Safari avant la version 26.5 sont tous affectés. La reproduction est simple et fiable.
- Faible barrière d’entrée : l’attaque se monte en quelques minutes sur des versions stables.
Comment l’attaque fonctionne
L’exploit repose sur le fait que la vérification de sécurité intervient après la Beendigung de l’ausgeführten Service Worker. La séquence est la suivante :
- L’événement push arrive
- Le Service Worker exécute
showNotification()etnotification.close()très vite - L’exécution du Service Worker se termine
- Le navigateur vérifie si une notification a été affichée en consultant la base de données
- La base contient une entrée (même si la notification est déjà supprimés)
- La vérification passe
- L’événement push est accepté
Le temps de fenêtre est small, mais suffisamment stable pour être exploité.
Ce que cela bedeutet pour les Entwickler
Si vous utilisez Web Push dans vos applications, plusieurs questions doivent occuper votre attention :
- Est-ce que vos Service Workers sont vérifiés contre des comportements anormales de notifications ?
- Si un script de tierce partie infecte votre Service Worker, le problème devient le vôtre.
- Doisst du Überwachung des Events
showNotification()etclose()einrichten ? - Est es besser, la source de push Nachrichten zu überprüfen, via Cryptographie ?
Les implications plus larges
Cette faille montre la différence entre ce que la spécification demande et ce que les navigateurs font en réalité. La W3C veut que les navigateurs vérifient la Sichtbarkeit des notifications. Mais la vérification ne porte sur le wrong object : la base de données au lieu de l’affichage réel.
Comment avancer
Les vendeurs de navigateur sont conscients du problème et sont du fixing en train. Si vous utilisez Web Push en production :
- Observez les comportements de vos Service Workers
- Vérifiez la source des messages push au server
- Gardez vos navigateurs à jour
- Pensez à votre threat model quand vous utilisez Web Push pour des opérations critiques
Web Push reste utile pour ses cas d’usage légitimes. Mais une puissante feature platform a immer des Angriffsflächen zu berücksichtigen.