Veebirakenduste kasutamine on muutunud iga ühiskonna jaoks tavaliseks. Me tegeleme nendega iga päev. Võime öelda, et nad ümbritsevad meid. Me kasutame neid tööl, meelelahutuseks ja teistega suhtlemise vahendina. Sageli ei saa me kasutajatena ja arendajatena aru, kui palju turvaauke sellistes rakendustes iga päev avastatakse.
Käesolevas dokumendis käsitletav haavatavus on olnud meiega juba pikka aega ja selle lihtsuse tõttu on seda sageli alahinnatud või isegi teadmata. veebirakenduse arendajad.
Peaaegu iga veebirakendus sisaldab linke, millele klõpsates avaneb uus vahekaart, et mitte sulgeda vahekaarti koos esialgse lehega. See on eelistatud käitumine, sest loojad soovivad, et kasutaja veedaks rakenduses võimalikult palju aega.
Rünnak, mis kasutab seda haavatavust ära, on niinimetatud "reverse tabnabbing". See on rünnak, kus sihtlehega seotud lehekülg on võimeline asendama selle lehe näiteks andmepüügilehega.
Rünnaku stsenaarium
Oletame, et ohver kasutab Facebooki, mis on tuntud linkide avamise poolest target="_blank" kaudu,
Loo võltsitud viiruslik lehekülg,
Looge andmepüügi veebisait, mis näeb välja nagu Facebooki sisselogimisleht,
Pange alljärgnevad kood viiruslikul lehel nt leitud XSS haavatavuse kaudu window.opener.location = 'https://phishing-website/facebook.com';
Ohver klõpsab Facebookis viirusliku lehe lingile,
Viiruslik leht suunab Facebooki vahekaardil ümber andmepüügi veebisaidile, kus palutakse kasutajal uuesti sisse logida.
Niisiis, me saame muuta vanema vahekaardi nakatunud sihtlehe akna objekti Web API. Tavaliselt kasutatakse rünnaku puhul paralleelselt mitut avastatud haavatavust ja andmepüügikelmusi.
Probleem
Kui me avame brauseris uue vahekaardi, kasutades linki koos target="_blank" atribuuti, on meil juurdepääs meie "viitajale" uuelt vahekaardilt. Täpsemalt öeldes, et avaja omadus Aken objekt, mis tagastab viite aknale, mis avas selle, meie vanemlehe.
See on tingitud käitumisest Window.open() funktsioon. Juurdepääsuga sellele atribuudile saame hõlpsasti asendada oma vanemlehe. Pange tähele, et mõned moodsad brauserid võivad teha window.opener funktsioon sihtkaardil kui null selle käitumise vältimiseks.
Ülal näete nakatunud linki, mis algselt avab uue vahekaardi GitHubi lehega, kuid vahepeal muudab meie "vanema" lehe Stackoverflow'i saidiks.
Elus näide
1. HTML lingid
Lisa rel="noopener noreferrer" et <a> silt.
The rel atribuut määratleb lingitud ressursi ja praeguse dokumendi vahelise seose.
noopener ütleb brauserile, et ta navigeeriks sihtmärgile, andmata ligipääsu selle avanud vanemettevõttele. Eesmärgi vahekaart Window.opener on null.
noreferrer hoiab ära, et brauser saadab sihtkohale navigeerimisel vanemale aadressi või mis tahes muu väärtuse referrerina läbi referer HTTP päis. Pange tähele, et selle HTTP-pealkirja nimi on tahtlikult valesti kirjutatud kui "referrer".
JavaScript puhul Window.open funktsiooni, saate lisada väärtused noopener ja noreferrer aastal windowFeatures parameeter Window.open funktsioon, kuid erinevad brauserid võivad reageerida erinevalt, seega on soovitatav teha Window.opener nagu null pärast seda, kui on kasutatud Window.open() funktsioon.