window.pipedriveLeadboosterConfig = { bas: 'leadbooster-chat.pipedrive.com', företagId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(funktion () { var w = fönster if (w.LeadBooster) { console.warn('LeadBooster finns redan') } annars { w.LeadBooster = { q: [], on: funktion (n, h) { this.q.push({ t: "o", n: n, h: h }) }, trigger: funktion (n) { this.q.push({ t: 't', n: n }) }, } } })() thecodest, Author at The Codest - Page 9 of 18

Nyligen har vi skrivit om säkerhet för webbapplikationer när det gäller XSS-sårbarhet. Den här gången vill vi uppmärksamma er på en annan fara.

Den sårbarhet som diskuteras i detta dokument har funnits länge och på grund av sin enkelhet underskattas den ofta eller är till och med okänd av vissa utvecklare av webbapplikationer.

Nästan alla webbapplikationer innehåller länkar som, när man klickar på dem, öppnas i en ny flik för att inte stänga fliken med den ursprungliga sidan. Detta är ett önskat beteende eftersom skaparna vill att användaren ska tillbringa så mycket tid som möjligt i applikationen.

En attack som utnyttjar denna sårbarhet är så kallad "reverse tabnabbing". Det är en attack där en sida som är länkad från målsidan kan ersätta den sidan med till exempel en phishing-sida.

Scenario för attack

  1. Anta att offret använder Facebook, som är känt för att öppna länkar via target="_blank",
  2. Skapa en falsk viral sida,
  3. Skapa en nätfiskewebbplats som ser ut som en inloggningssida på Facebook,
  4. Sätt in nedanstående kod på virussidan, t.ex. via en funnen XSS-sårbarhet
    window.opener.location = "https://phishing-website/facebook.com";
  5. Offret klickar på länken på Facebook till den virala sidan,
  6. Den virala sidan omdirigerar Facebook-fliken till phishing-webbplatsen och ber användaren att logga in igen.

Så vi kan ändra den överordnade fliken från den infekterade målsidan med hjälp av ett fönsterobjekt från Web API. Vanligtvis innebär en attack att man använder flera upptäckta sårbarheter och phishing-bedrägerier parallellt.

Problemet

När vi öppnar en ny flik i webbläsaren med hjälp av en länk med mål="_blank" attribut har vi tillgång till vår "referrer" från den nya fliken. Mer specifikt, till öppnare egenskapen hos Fönster objekt, som returnerar en referens till fönstret som öppnade det, vår överordnade sida.

Detta beror på beteendet hos Fönster.öppna() funktion. Med tillgång till detta attribut kan vi enkelt ersätta vår föräldrasida. Observera att vissa moderna webbläsare kan göra fönster.öppnare funktion i målfliken som noll för att förhindra detta beteende.

Exempel på kod

<code> <a href="https://github.com" target="_blank">Gå till GitHub - infekterad länk</a>
konst
 if (länk)
   link[0].onclick = () => {
     if (window) window.opener.location = 'https://stackoverflow.com'
   }

Ovan kan du se den infekterade länken som ursprungligen öppnar en ny flik med en GitHub-sida men under tiden ändrar den vår "överordnade" sida till Stackoverflow-webbplatsen.

Live exempel

1. HTML-länkar

Lägg till rel="noopener noreferrer" till <a> tagg.

Den rel attributet definierar förhållandet mellan en länkad resurs och det aktuella dokumentet.

noopener säger till webbläsaren att navigera till målet utan att ge åtkomst till den förälder som öppnade det. Fliken Mål Fönsteröppnare kommer att vara noll.

noreferrer förhindrar att webbläsaren, när den navigerar till målet, skickar adressen eller något annat värde som referrer till föräldern via referent HTTP-rubrik. Observera att namnet på detta HTTP-huvud avsiktligt är felstavat som "referrer".

2. JavaScript Länkar

För JavaScript Fönster.öppna funktionen kan du lägga till värdena noopener och noreferrer i fönsterFunktioner parametern för Fönster.öppna funktion men olika webbläsare kan reagera olika så det rekommenderas att göra Fönsteröppnare som noll efter användning Fönster.öppna() funktion.

Läs mer på engelska:

Rails API & CORS. Ett stänk av medvetenhet

Strategier för datahämtning i NextJS

7 skäl till varför din webbutik behöver Magento

Om du tycker att den här artikeln är intressant kan du följa Lukasz på Github: https://github.com/twistezo

sv_SESwedish