Olemme hiljattain kirjoittaneet web-sovelluksen turvallisuus XSS-haavoittuvuuden osalta. Tällä kertaa haluamme kiinnittää huomionne toiseen vaaraan.
Tässä asiakirjassa käsitelty haavoittuvuus on ollut olemassa jo pitkään, ja sen yksinkertaisuuden vuoksi sitä usein aliarvioidaan tai se on jopa tuntematon. web-sovellusten kehittäjät.
Lähes kaikki verkkosovellukset sisältävät linkkejä, jotka avautuvat uuteen välilehteen, kun niitä napsautetaan, jotta välilehteä ja alkuperäistä sivua ei suljeta. Tämä on suosittua käytöstä, koska tekijät haluavat, että käyttäjä viettää sovelluksessa mahdollisimman paljon aikaa.
Tätä haavoittuvuutta hyödyntävä hyökkäys on niin sanottu "käänteinen tabnabbing". Se on hyökkäys, jossa kohdesivulta linkitetty sivu pystyy korvaamaan kyseisen sivun esimerkiksi phishing-sivustolla.
Hyökkäysskenaario
- Oletetaan, että uhri käyttää Facebookia, joka on tunnettu siitä, että se avaa linkkejä target="_blank" -tekstillä,
- Luo väärennetty virussivu,
- Luo phishing-sivusto, joka näyttää Facebookin kirjautumissivulta,
- Laita alla oleva koodi virussivulla esim. löydetyn XSS-haavoittuvuuden kautta.
window.opener.location = 'https://phishing-website/facebook.com';
- Uhri klikkaa Facebookissa olevaa linkkiä virussivulle,
- Virussivu ohjaa Facebook-välilehden phishing-sivustolle, jossa käyttäjää pyydetään kirjautumaan uudelleen.
Voimme siis vaihtaa vanhemman välilehden tartunnan saaneelta kohdesivulta Web API:n ikkunaobjektilla. Tyypillisesti hyökkäyksessä käytetään useita löydettyjä haavoittuvuuksia ja phishing-huijauksia rinnakkain.
Ongelma
Kun avaamme selaimessa uuden välilehden käyttämällä linkkiä, jossa on merkkijono target="_blank"
attribuutin avulla voimme käyttää "referreriä" uudelta välilehdeltä. Tarkemmin sanottuna avaaja
ominaisuus Ikkuna
objekti, joka palauttaa viittauksen ikkunaan, joka avasi sen, eli vanhemman sivun.
Tämä johtuu siitä, että Window.open()
toiminto. Kun meillä on pääsy tähän määritteeseen, voimme helposti korvata emosivumme. Huomaa, että jotkut nykyaikaiset selaimet voivat tehdä window.opener
toiminto kohde-välilehdellä kuten null
estääksesi tämän käyttäytymisen.
Esimerkkikoodi
<code> <a href="https://github.com" target="_blank">Siirry GitHubiin - tartunnan saanut linkki</a>
const if (link) link[0].onclick = () => { if (window) window.opener.location = 'https://stackoverflow.com' }
Yllä näet tartunnan saaneen linkin, joka avaa alun perin uuden välilehden GitHub-sivulle, mutta samalla se vaihtaa "vanhemman" sivun Stackoverflow-sivustoon.
Live-esimerkki
1. HTML-linkit
Lisää rel="noopener noreferrer"
osoitteeseen <a>
tag.
The rel
määrite määrittelee linkitetyn resurssin ja nykyisen asiakirjan välisen suhteen.
noopener
käskee selainta siirtymään kohteeseen myöntämättä pääsyä sen avanneelle vanhemmalle osapuolelle. Kohde-välilehti Window.opener
on null
.
noreferrer
estää selainta, kun se siirtyy kohteeseen, lähettämästä vanhemmalle osapuolelle osoitetta tai mitä tahansa muuta arvoa referrer-arvona. referer
HTTP-otsikko. Huomaa, että tämän HTTP-otsikon nimi on tarkoituksellisesti kirjoitettu väärin "referrer".
2. JavaScript linkit
JavaScript:n osalta Window.open
funktio, voit lisätä arvot noopener
ja noreferrer
vuonna windowFeatures
parametri Window.open
toiminto, mutta eri selaimet voivat reagoida eri tavalla, joten on suositeltavaa tehdä Window.opener
kuten null
käytön jälkeen Window.open()
toiminto.
Lue lisää:
Rails API ja CORS. Ripaus tietoisuutta
Tiedonhakustrategiat NextJS:ssä
7 syytä, miksi verkkokauppasi tarvitsee Magentoa
Jos tämä artikkeli kiinnostaa sinua, seuraa Lukaszia Githubissa: https://github.com/twistezo