Dlaczego powiadomienia push mogą zamienić się w ciche wektory ataku
Cicha luka, o której mało kto wie
Web Push to dziś standard w aplikacjach webowych. Używa się go do powiadomień o nowych wiadomościach, alertach systemowych czy aktualizacjach. Ale co się stanie, gdy mechanizm stworzony po to, żeby informować użytkowników, stanie się kanałem do cichych i długotrwałych ataków?
Mowa o luce nazywanej Sleeping Agent. Wykorzystuje ona lukę w sposobie, w jaki przeglądarki sprawdzają, czy powiadomienie naprawdę zostało pokazane użytkownikowi.
Jak działa atak
Web Push API wymaga, żeby każde powiadomienie było widoczne dla użytkownika. W tym celu deweloperzy muszą ustawić flagę userVisibleOnly: true. To miało być zabezpieczenie przed nadużyciami.
W praktyce jednak wygląda to inaczej.
Złośliwy Service Worker po otrzymaniu pusha wywołuje dwie metody jedna po drugiej:
showNotification()– wyświetla powiadomienienotification.close()– natychmiast je zamyka
Powiadomienie trafia do bazy przeglądarki na ułamek sekundy i znika, zanim użytkownik zdąży je zauważyć. Gdy przeglądarka sprawdza, czy wymaganie userVisibleOnly zostało spełnione, patrzy nie na to, co aktualnie widzi użytkownik,而是 na rekordy w bazie danych. To wystarczy, żeby atak się udał.
Dlaczego to ma znaczenie
Sleeping Agent pozwala na utrzymanie stałego, niewidocznego połączenia między przeglądarką a serwerem atakującego. Nie trzeba instalować żadnego programu. Wystarczy, że użytkownik wejdzie raz na zainfekowaną stronę.
Ta luka wpływa na:
- Bezpieczeństwo – ukryte kanały komunikacyjne bez wiedzy użytkownika
- Zgodność z regulacjami – wiele standardów zakłada, że powiadomienia są zawsze widoczne
- Różne przeglądarki – problem dotyczy Chrome, Edge i starszych wersji Safari
- Łatwość wykorzystania – atak da się przeprowadzić w kilka minut
Jak wygląda technicznie
Problem wynika z tego, że przeglądarka sprawdza spełnienie warunków bezpieczeństwa po zakończeniu działania Service Workera. Gdy zdarignie push arrives, worker szybko pokazuje i zamyk
Wystarczy więc, że w tym krótkim oknie między pokazaniem i zamknięciem powiadomienia przeglądarka zapisuje fakt jego istnienia w bazie,而不去 sprawdza, czy nadal jest widoczne na ekranie.