window.pipedriveLeadboosterConfig = { base: leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster on juba olemas') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() thecodest, autor aadressil The Codest - Page 9 of 18

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

  1. Oletame, et ohver kasutab Facebooki, mis on tuntud linkide avamise poolest target="_blank" kaudu,
  2. Loo võltsitud viiruslik lehekülg,
  3. Looge andmepüügi veebisait, mis näeb välja nagu Facebooki sisselogimisleht,
  4. Pange alljärgnevad kood viiruslikul lehel nt leitud XSS haavatavuse kaudu
    window.opener.location = 'https://phishing-website/facebook.com';
  5. Ohver klõpsab Facebookis viirusliku lehe lingile,
  6. 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

etEstonian