Hiljuti oleme kirjutanud veebirakenduse turvalisus, kui tegemist on XSS haavatavusega. Seekord tahame pöörata teie tähelepanu veel ühele ohule.
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.
Näidiskood
<code> <a href="https://github.com" target="_blank">Mine GitHubi - nakatunud link</a>
const if (link) link[0].onclick = () => { if (window) window.opener.location = 'https://stackoverflow.com' }
Ü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".
2. JavaScript lingid
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.
Loe edasi:
Rails API ja CORS. Riputus teadvusest
NextJS-i andmete hankimise strateegiad
7 põhjust, miks teie veebipood vajab Magentot
Kui see artikkel tundub teile huvitav, jälgige Lukasz'i Githubis: https://github.com/twistezo