At Synack me todella nauttia suuria haavoittuvuuksia, onko web, mobiili, isäntä tai jopa täysin törkeää laitteet ja järjestelmät (satelliitti hakkerointi ketään?). Mutta pidämme aina suuret havainnot, jotka olemme SRT: n kanssa tehneet asiakkaillemme luottamuksellisina. Joten vaikka tämä ei ole viesti noin suuri vuln vuonna Synack asiakas, se kattaa tarkka tyyppi asia, että näemme viikoittain tai joskus päivittäin: haavoittuvuus järjestelmässä, jossa on miljoonia käyttäjiä, joka johtaa täydellinen kompromissi järjestelmän turvallisuutta.
löysin hiljattain haavoittuvuuden Microsoftin Live.com autentikointijärjestelmä, joka, jos sinulla on tili missä tahansa Microsoftin palvelussa, olisi todennäköisesti vaikuttanut sinuun. Tässä viestissä kuvataan haavoittuvuuden täydelliset yksityiskohdat nyt, kun Microsoft on paikannut ongelman.
Johdanto
keskivertoihmisen ymmärrys tietoturvasta on aina ollut melko vähäistä. Back in the day, jos joku kuuli, että olit mukana tietoturva, standardi kysymys olisi ”can you hack my Hotmail”, tai useammin, ”can you hack my friend ’s Hotmail”. Oletan, että takaisin päivä ihmiset vielä käytetty Yahoo mail ja Microsoft oli vielä hankkia Hotmail, mutta se on hieman liian kaukana takana! Väistämättä voisi joko ehdottaa, että henkilö vain arvata henkilön salasanan Nollaa kysymyksiä, tai asentaa Sub7. Itse asiassa hotmailin hakkerointi oli varmasti liian vaikeaa, puhumattakaan täysin laittomasta.
tietoturvamaailma on muuttunut paljon parin viime vuoden aikana, ja toisin kuin takavuosina, Microsoft kannustaa nyt täysin tietoturvatutkijoita yrittämään ”hakkerointia Hotmailiin”. Totta kai Hotmail on muutettu Outlookiksi.com, ja näinä päivinä kaikki haluavat tietää, jos voit hakata heidän Facebook, mutta se on sivuseikka.
Microsoft Online Services bounty-ohjelma päivitettiin äskettäin sisällyttämään” Microsoft-tili ” maalitauluksi, joka on käytännössä kaikilla näillä verkkotunnuksilla Isännöity kirjautumisjärjestelmä:
– login.windows.net
– login.microsoftonline.com
– login.live.com
yllä olevassa luettelossa login.live.com on autentikointijärjestelmä, jonka läpi menet, jos yrität todentaa Outlook.com ja valtava määrä muita Microsoftin palveluita. Päätin tutkia sitä ensin nähdäkseni, löytäisinkö mitään ongelmia. Odotetusti, eri API: n käytetään käsitellä kirjautuminen näytti olevan hyvin kovettunut. Lisäsuojakerroksia oli monissa paikoissa; esimerkiksi joissakin paikoissa salasanat salataan julkisella avaimella ennen lähetystä, vaikka kaikki yhteydenpito tapahtuu HTTPS: n kautta.
muutaman tunnin testauksen jälkeen löysin muutamia pieniä ongelmia, joista raportoin, mutta ei mitään varsinaista huomioitavaa. Testatessani web-sovelluksia huomaan usein, että yleisin työnkulku on myös turvallisin, joten haarauduin tutkimaan muita tapoja, joilla käyttäjä voisi todentaa live.com järjestelmä. Lähes vuosi sitten olin löytänyt useita OAuth haavoittuvuuksia Yammer joka oli myös Microsoft Online-palvelut bounty tavoite, joten siellä katsoin seuraavaksi live.com tästä mielenkiintoiset havainnot alkavat!
haavoittuvuuden Tausta
ennen kuin pääsen suoraan löydettyyn haavoittuvuuteen, tarvitaan nopea katsaus oauthina tunnettuun väärään tietoturvajärjestelmään.:
Wikipedia kertoo, että ”OAuth tarjoaa asiakassovelluksille”suojatun delegoidun pääsyn” palvelimen resursseihin resurssin omistajan puolesta”. Wikipediasta löytyy myös purevia kommentteja sen evoluutiosta ja turvallisuudesta, jotka kannattaa lukea hyvän naurun vuoksi. Realistisesti OAuth ei tee muuta kuin sallii käyttäjän myöntää pääsyn johonkin tai kaikkiin tilinsä käyttöoikeuksiin kolmannelle osapuolelle. Tein MS Paint-piirroksen havainnollistaakseni tätä, koska en löytänyt hyvää Wikipediasta.
kuten yllä olevasta kuvasta näkyy, sinulla on palvelin, jonka käyttäjä on valtuuttanut antamaan käyttöoikeuden tiliinsä asiakassovellukselle. Tätä kulissien takana käsittelevä mekanismi voidaan rakentaa usealla eri tavalla, jotka on määritelty OAuth RFC: ssä. Yksi tapa rakentaa se on” implisiittinen ” autentikointivirta, jossa autentikointipalvelin antaa käyttöavaimen suoraan asiakkaalle. Toinen suosittu tapa on käyttää” valtuutuskoodia ” – menettelyä, jossa autentikointipalvelin antaa valtuutuskoodin, jonka asiakasjärjestelmä ottaa, ja vaihtaa sitten käyttöoikeusavaimen sen asiakkaan salaista arvoa käyttäen. Microsoft on hyvä kuvaus niiden käytöstä, miten he ovat toteuttaneet nämä mekanismit live.com tässä.:
https://msdn.microsoft.com/en-us/library/hh243647.aspx
graafinen he tekivät ”valtuutuskoodi” virtaus näyttää tältä:
tuollainen Kuva on hyvä ymmärtää prosessia, mutta minulle kynätestaajana näyttää myös paljon mahdollisuuksia ja paikkoja, joissa asiat voivat mennä pieleen. Joten, että taustalla, mitä löydettiin!
Mikä Voisi Mennä Pieleen?
kuten edellä mainitussa jaksossa todettiin, on paljon paikkoja, joissa jokin voisi mennä pieleen. Yksi OAuth-todennusmenettelyn perusvaiheista on, että käyttäjä voi halutessaan myöntää sovellukselle pääsyn. Tämä on yleensä aikaan kautta nopea näin:
yleensä käyttäjän tarvitsee hyväksyä tämä kehote vain kerran, mutta ennen kuin hän hyväksyy sen, kyseisellä sovelluksella ei ole mitään pääsyä tililleen (salliiko keskivertokäyttäjä WESin pahan sovelluksen pääsyn vai ei, on ehkä eri kysymys!).
hyökkääjänä ajatellen olisi ehdottomasti hienoa, jos voisimme hyväksyä pyynnön käyttäjän puolesta. Valitettavasti minulle,” X-Frame-Options ”-otsikon oli asetettu” deny ” (x-frame-options-asetukset olivat tämän bounty liian soveltamisalan ulkopuolella). Joten kun klikkaus on pois, päätin saada paremman käsityksen siitä, miten pyyntö itse toimi. Jos käyttäjä napsauttaa ”Kyllä”, Seuraava pyyntö lähetetään palvelimelle (plus jotkut tylsät otsikot):
vaikka yllä oleva URL-polku sisältää joitakin luotuja poletteja, testaus osoitti, että ne olivat tarpeettomia pyynnön onnistumiseksi. Viesti seuraavaan URL toimisi yhtä hyvin:
https://account.live.com/Consent/Update?ru=https://login.live.com/oauth20_authorize.srf%3flc%3d1033%26client_id%3d000000004C15E107% 26scope%3dwl.perus % 26vastaa_type%3dcode%26redirect_uri%3dhttp:// exfiltrated.com&client_id=000000004c15e107&Rd=exfiltrated.kom&scope=wl.basic
pyynnön mukana lähetetty eväste, joka tarvitaan sisältämään kelvollinen istuntotunniste kohdassa ”IPT”. Tämä evästearvo on kansoitettu sivustollahttps:/ / login.live.com / oauth20_ authorize.srf ennen kuin käyttäjän lupaa pyytävä sivu näytetään. Tämä tapahtuu riippumatta siitä, onko käyttäjä lopulta napsauttaa ”Kyllä”, Vaikka se on asetettu joidenkin Javascript-koodi, joten jos olemme hyökkäävät tätä prosessia, meidän olisi pakko pakottaa käyttäjä ladata, että sivu jossain vaiheessa.
jos seuraat mukana, niin toivottavasti kysyt nyt: ”OK, niin entäs sitten itse POSTIPYYNTÖ, ja se kanarialinnun arvo?”. Olin tutkinut kaikki muut parametrit ja viestintävirrat ensin, koska nähdä arvo merkitty ”canary” lähetetään POST pyyntö lähes varmasti tarkoittaa, että sitä käytetään token estää CSRF hyökkäyksiä. Turvallisuustestauksen tarkoitus on kuitenkin varmistaa, että oletukset pitävät paikkansa. Joten muutin POST pyyntö, ja muutti canary arvo ”hacks_go_here”. Sen sijaan, että palvelin olisi ohjannut 500 virheeseen, se lähetti takaisin myönteisen vastauksen!
CSRF to PoC
koska CSRF token oli viimeinen asia, jota olin yrittänyt peukaloida, tiesin varmasti, että tämän pitäisi tehdä voimassa CSRF haavoittuvuus. Kuten lähes kaikissa CSRF-hyökkäyksissä, ainoa edellytys oli, että uhri oli kirjautunut sisään ja hänellä oli voimassa oleva istuntotunniste evästeessään. Toisin kuin monet muut web-haavoittuvuudet, CSRF-haavoittuvuuden vaikutus on täysin riippuvainen kyseisestä API-funktiosta. Tämän CSRF: n avulla voin ohittaa OAuth-todennusjärjestelmän käyttäjän vuorovaikutusvaiheen, mutta PoC on tuhannen sanan arvoinen, joten seuraava askel oli rakentaa koodia tämän haavoittuvuuden vaikutuksen demoksi.
normaalissa OAuth-todennusvirrassa, kun käyttäjä myöntää pääsyn, palvelimen tulee palauttaa käyttäjälle Pääsykoodi. Käyttäjä siirtää sen asiakassovellukselle, joka voi sitten käyttää myönnettyjä oikeuksia. A live.com asiakassovellus voi pyytää monenlaisia mahdollisia käyttöoikeuksia. Harkitsin vain polkumyynti käyttäjän yhteystiedot tai jotain, mutta miksi uhrata tavoite hakkerointi Hotmail nyt? Silloin PoC: n tarvitsemat käyttöoikeudet olivat:
wl.offline_access+wl.imap
Offline ei ollut kaikki tarpeellinen, mutta heitin sen sisään osoittaakseni, että se myönnetään.
kun tarvittavat oikeudet on valittu, on 4 vaihetta päästä käyttäjän sähköpostitilille:
1) Meidän on tehtävä valtuutuspyyntö asiakassovelluksellemme käyttäen yllä olevia oikeuksia. Palvelin pyytää käyttäjää hyväksymään tai hylkäämään.
2) Kun käyttäjä hyväksyy näiden käyttöoikeuksien pyyntömme, palvelin liittää uudelleenohjaukseen parametrin ”#access_token=<token>”.
3) koska palvelinpuolen komentosarjamme tarvitsevat pääsyn kyseiseen arvoon, meidän on tehtävä yksinkertainen sivu, jotta voimme ottaa Tokenin selaimen URL-kentästä ja siirtää sen palvelimellemme.
4) lopuksi tarvitsemme joitakin skriptejä palvelinpuolelta, jotta voimme ottaa tämän Tokenin ja käyttää sitä kirjautuaksemme IMAPIIN. Microsoftilla on hieman mutkikas prosessi käyttää OAuth-tunnusta kirjautumiseen suoraan IMAP: n kautta. Muutama näyte kirjastot eivät ole olemassa tätä varten, ja koko prosessi on kuvattu tällä sivulla:
https://msdn.microsoft.com/en-us/library/dn440163.aspx
tämä työnkulku toimisi hyvin olettaen, että käyttäjä päättää antaa meille luvan. Nyt minun tarvitsee vain muokata työnkulkua sisällyttämään sen sijaan CSRF. Kuten edellä todettiin, live.com todennuspalvelin odottaa ISTUNTOTUNNUSTA IPT-evästeessä. Voimme varmistaa, että se on kansoitettu lähettämällä käyttäjän ensin validhttps://login.live.com/oauth20_ authorize.srf-sivulle. Heti sen jälkeen voimme suorittaa CSRF-pyynnön, joka käyttää uudelleen asuttua evästearvoa. Tämä voi nyt korvata vaiheen 1 ja pakottaa palvelimen välittömästi hypätä vaiheeseen 2.
Demo ja vaikutus
Microsoft on nyt korjannut ongelman, mutta tässä nopea video näyttää sen toiminnassa.
kuten videosta näkyy, kaikki, mitä todella tarvitaan, on saada uhri käymään haitallisen verkkosivun. Demoa ei ollut suunniteltu ovelaksi ja toimivaksi verkkosivuston taustalla tai osana jotain ilkeämielistä bannerimainosta, mutta se olisi varmasti voitu tehdä sillä tavalla.
käyttämällä tätä kohdennettuna hyökkäyksenä on varmasti suuri vaikutus, mutta tämä on myös täydellinen haavoittuvuuden tyyppi muuttumaan madoksi. IMAP ja contact book access, mato voisi helposti lähettää kaikki käyttäjän yhteystiedot (tai ainakin ne, jotka käyttävät Hotmail, Outlook.com, jne), jotain houkuttelevaa, ”ILOVEYOU” virus tyyli, ja levitä jokaiselle käyttäjälle, joka napsauttaa linkkiä.
lopulliset ajatukset ja aikajana
tämän haavoittuvuuden etsiminen ja toimivan Pocin tekeminen vaati melkoisen vaivan eri live.com API: t. Tarkasteltaessa sitä kaikkea kuitenkin, tämä todella on vain klassinen CSRF haavoittuvuus. Ainoa asia, joka on yllättävää se on, että se on kriittinen todennusjärjestelmä, joka lopulta voidaan käyttää ottamaan kenen tahansa käyttäjän tilin.
ulkopuolisena testaajana minulla ei ole aavistustakaan siitä, kuinka kauan tämä haavoittuvuus on voinut olla olemassa, tai onko kukaan koskaan yrittänyt hyödyntää sitä. Samalla tämänkaltaiset havainnot osoittavat varmasti sen arvon, että ulkopuoliset testaajat voivat lähettää haavoittuvuuksia yrityksellesi ennen kuin hyökkääjät käyttävät niitä sinua vastaan. Microsoft on paljon edellä useimmat yritykset, kun se tulee turvallisuus, ja silti ovat edelleen suceptible tämänkaltaisia. Synackin kokemuksen mukaan haavoittuvuuksia paljastuu jopa näennäisesti hyvin suojatuissa järjestelmissä, kun suuri joukko ulkopuolisia tutkijoita testaa kyseistä järjestelmää. Tämä on pohjimmiltaan lähtökohta, että Synack toimii, ja siksi yhä useammat yritykset tarjoavat omia bounty-ohjelmia(minä, tietenkin, suosittelisin Synackin ohjelma käynnissä oman!).
kuten alla olevasta aikajanasta voi nähdä, Microsoft oli reagoiva saadakseen korjauksen tähän ongelmaan ulos, mikä oli hienoa nähdä.
Timeline:
August 23, 2015: haavoittuvuus löydetty
August 25, 2015: haavoittuvuus raportoitu Microsoft
August 31, 2015: Microsoft issues case number for vulnerability
September 15, 2015: Microsoft releases fix for issue, issues $24,000 bounty (double bounties promo)