Linki wysłane w Messengerze na facebook.com otwierały się w nowej karcie bez rel="noopener". Otwarta strona mogła po cichu podmienić kartę Facebooka na dowolny adres, na przykład fałszywy ekran logowania. Zgłoszone do Facebooka tego samego dnia, naprawione następnego.
// badanie wykonane prywatnie w 2020 roku, przed założeniem UIES; publikuje je tu autor
Gdy strona otwiera link w nowej karcie (target="_blank") bez rel="noopener", nowa strona dostaje odwołanie do karty, z której przyszła (window.opener). Dzięki niemu może zmienić adres tamtej karty. Użytkownik patrzy w tym czasie na nową kartę, więc podmiany w tle nie zauważa.
Linki wysłane w czacie Messengera na facebook.com (wersja przeglądarkowa) otwierały się w nowej karcie i zachowywały dostęp do karty Facebooka. Żeby to pokazać, umieściłem stronę testową na tymczasowej domenie i wysłałem link do niej w czacie. Po kliknięciu strona testowa przez window.opener przenosiła kartę Facebooka na nieszkodliwy adres, onet.pl.
// klatki z filmu nagranego telefonem z ekranu, listopad 2020; adres strony testowej zamaskowany
Dowód koncepcji tylko przekierowywał na portal informacyjny. Prawdziwy atakujący zrobiłby co innego:
Ten scenariusz jest opisany, a nie przeprowadzony. Dowód koncepcji używał wyłącznie nieszkodliwego przekierowania.
rel="noopener noreferrer" do linków otwieranych w nowej karcie.rel="noopener noreferrer" do każdego linku z target="_blank", przede wszystkim do linków, które mogą wstawiać użytkownicy (komentarze, czat, profile).noopener do window.open().Cross-Origin-Opener-Policy, który odcina powiązanie Twojej strony z oknami z innych domen.target="_blank" jak noopener, ale starsze przeglądarki i wbudowane widoki WWW w aplikacjach już niekoniecznie. Jawny atrybut nic nie kosztuje.