Target=”_blank” – najbolj podcenjena ranljivost

Pri povezavah na spletu je uporaba parametra target=”_blank” pogost pojav. Slednji nam omogoča, da povezavo ki jo klikne uporabnik avtomatsko odpre v novem oknu oz. zavihku brskalnika. Najbolj zanimivo dejstvo pri uporabi značke target=”_blank” pa je ta, da ima linkana stran delni dostop do osnovne strani in posledično varnostno luknjo, ki se lahko izkoristi za krajo uporabniških imen in gesel.

Ob kliku na link se nam odre nov zavihek, posledično pa ima ta nov zavihek dostop do osnovne strani, kjer je bila povezava. To se lahko zgodi z uporabo objekta window.opener.
Nova stran nam lahko tako spremeni osnovno stran na neko drugo oz. t.i. »phishing« strani. Prevod besede »phishing« bi bil ribarjenje, saj napadalec nastavi vabo uporabniku. Ker smo ta zavihek že imeli v brskalniku mu popolnoma zaupamo in nismo pozorni, kot sicer.

Primer napada s pomočjo target=”_blank”

  • Ustvarimo zanimivo oz. luštno stran z npr. kužki ali mucki, skratka viralno vsebino.
  • Te vsebine bomo delili npr. na Facebooku/Gmailu, …
  • Temu primerno pripravimo »phising« stran, ki npr. predstavlja odjavo iz Facebooka/Gmaila, … ki je seveda na drugi domeni. Če želimo biti res dobri kupimo še domeno, ki ima mogoče enako ime ali samo zamenjani črki, skratka čimbolj kredibilno domeno.
  • Na virlani strani dodamo kodo za povezavo do »phising« strani
    window.opener.location = ‘https://fakestran/login.html’;
  • Ko se uporabnik vrne na prvotni zavihek ga pričaka posnetek originalne strani z odjavo. Uporabnik ponovno vnese username in geslo, »phising« stran ga preusmeri nazaj v že prijavljen Facebook/Gmail in uporabnik sploh ne opazi, da je napadlcu posredoval uporabniško ime in geslo.

Primer takšne strani v praksi – stran, ki ima link in se bo spremenila v Facebook login primer, ko si bomo ogledovali stran na povezavi. Zakaj ne moremo narediti povezave iz WordPressa? WordPress avtomatsko doda rel=”noopener noreferrer” in tako zapre varnostno luknjo.

Kako lahko popravimo ranljivost target=”_blank”

Vsem povezavam, ki peljejo na nove zavihke dodamo parameter rel=”noopener” oz. rel=”noopener noreferrer” (FireFox ne podpira noopener).

Enako velja tudi za odpiranje novih zavihkov s pomočjo window.open(). Rešitev v tem primeru bi potem bila reset.

Primer

var povezava = window.open();
povezava.opener = null;

Zanimivo pa je, da veliko spletnih storitev tega ne uporablja. Še bolje bi bilo, če bi brskalniki take ranljivosti blokirali avtomatsko. Skratka previdnost ni nikoli odveč.

Dodatne branje: Links to cross-origin destinations are unsafe

Komentiraj


*