Web Push: a csendes hátsó ajtó, amiről senki sem beszél
A rejtett veszély, amit senki sem vesz észre
A webes push értesítések ma már szinte alapvető részei az online szolgáltatásoknak. Valós idejű értesítéseket küldenek, vagy fontos figyelmeztetéseket jelenítenek meg. De mi történik, ha ez a rendszer éppen a támadók kezére játszik?
A Sleeping Agent nevű sebezhetőség pontosan ezt ahiányosságot használja ki. A böngészőkben működő Web Push API biztonsági szabályait veszi célba, méghozzá úgy, hogy egy időzítési trükk segítségével megkerüli a védelem egyik legfontosabb elemét.
Hol rejlik a probléma
A Web Push API egyik fő biztonsági szabálya, hogy minden push üzenetnek látható értesítést kell küldenie a felhasználó felé. Ezt a feltételt a userVisibleOnly: true paraméterrel lehet beállítani a Service Workerben.
A gond csak az, hogy a böngészők ezt a szabályt nem mindig tartják be szigorúan. A Sleeping Agent támadás lényege az, hogy egy rosszindulatú Service Worker nagyon gyorsan egymás után meghívja a showNotification() függvényt, majd azonnal bezárja az értesítést a notification.close() metódussal.
Az értesítés így rövid időre megjelenik a böngésző belső adatbázisában, de a felhasználó számára sohasem látható. A böngésző viszont csak az adatbázis tartalmát ellenőrzi, nem azt, hogy az értesítés valóban látható-e. Így a támadók maradnak invisibilis parancsnoki csatornával,而不必 látható állandó kapcsolatot tartani.
Miért jelent ez komoly veszélyt
Ez a támadás több szinten is veszélyes. A támadók egyszeri oldal-látogatás után hosszú ideig, invisibilis módon kommunikálhatnak a felhasználó gépával. A klasszikus malware-rel szemben ez a technikát nem szükséges telepíteni – egyszerűen csak egy rosszindulatű oldalra kell egyszer látogatni.
A hagyományos ellenőrzési rendszerek is megbízhatatlannak hajlamosak lenni, mert keringő értesítés nélkül az egész push mechanizmus átléphet a biztonsági ellenőrlő rendszerek radarja alatt.
A támadás több böngészőt is érint,包Chrome-ot, Edge-et és néhány régebbi Safari verziót is. És legfontosabb talán az, hogy nem nehéz megvalósítani – néhány lépéssel már működik a támadás.
A működés módja
A technische működés egyszerű: a push esemény megérkezik, a Service Worker végrehajtja a showNotification() és notification.close() parancsokat szinte azonnal, meghívja a showNotification() és notification.close() függvényeket szinte azonnal, majd befejezi magát. A böngésző ellenőrzése után csak az adatbázis tartalmát vizsgálja – és ha ott megjelenik egy rekord, akkor az egész folyamatot biztonságosnak tekintja.
A fejlesztők számára jelentkező kockázatok
Ha valaki webes alkalmazásokat fejleszt, ami push értesítéseket használ, több kérdésre is érdemes figyelni:
Az Ön Service Workerjeiben van-e olyan kód, amelyek schnell értesítést mutatnak és azonnal bezárják őket?
Az értesítés megjelenése és bezárása körül vannak-e megfigyelési lehetőségek,方便 hogy gyanús viselkedést észleljenek.
A push üzenetek forrását meg tudja-e ellenőrizni,方便 hogy csak a saját küldő szerveréből származnak.
A nagyobb összefüggések
Ez a vulnerability egyik legfontosabb tanulsága az, hogy a böngészők biztonsági szabályai nem mindig hatékonyan kerülthrough implementálva. A W3C specifikáció szerint a böngészőknek biztosítaniuk kell, hogy minden push üzenet valóban látható legyen. De a ténächliche ellenőrzés csak az adatbázis tartalmát vizsgálja – és ez éppen a létfik a támadás irányába.
Egy lépés előre
A böngészők fejlesztői már ismerik a problémát, és már fixek folyamatban vannak. Joszéles production rendszereket fenntartsz, érdemes figyelni a Service Worker viselkedését, az üzenetek valóban valódi forrásából származnak,并且 updateálni a böngészőket is.
A Web Push API nagyon hasznos, de bármely erős technológiával hasonlóan, érdemes a biztonságos használati feltételeket is figyelembe ni tenni.