Onderzoekers van het webcoderingsbeveiligingsbedrijf SALT hebben zojuist een fascinerende beschrijving gepubliceerd van hoe ze een authenticatie bug nagesynchroniseerde CVE-2023-28131 in een populaire online app-ingebouwde toolkit die bekend staat als Expo.
Het goede nieuws is dat Expo reageerde heel snel naar het bugrapport van SALT, met een oplossing binnen slechts een paar uur na SALT's verantwoorde onthulling.
Gelukkig was de fix niet afhankelijk van het downloaden van iets door klanten, omdat de patch was geïmplementeerd in de cloudservice van Expo en er geen patches nodig waren voor vooraf geïnstalleerde apps of client-side code.
Exposities adviserend legde niet alleen uit wat er gebeurde en hoe het bedrijf het probleem oploste, maar bood ook programmeeradvies aan zijn klanten over hoe ze dit soort mogelijke kwetsbaarheden met andere online diensten konden vermijden.
SALT wachtte vervolgens drie maanden voordat het zijn rapport publiceerde, in plaats van het zo snel mogelijk uit te brengen voor publiciteitsdoeleinden, waardoor Expo-gebruikers de kans kregen om de reactie van Expo te verwerken en ernaar te handelen.
Houden het simpel
Het buggy-authenticatieproces wordt in detail uitgelegd in SALT's rapport, maar we zullen hier een sterk vereenvoudigde beschrijving geven van wat er mis ging in de OAUTH-service van Expo.
OAuth, kort voor Open autorisatiekader, is een proces waarmee u toegang krijgt tot privégegevens in een online service (zoals het bewerken van uw online profiel, het toevoegen van een nieuw blogartikel of het goedkeuren van een webservice om posts op sociale media voor u te plaatsen), zonder ooit een wachtwoord in te stellen met , of rechtstreeks inloggen op die service zelf.
Wanneer u webservices ziet die u een Log in met Google of Facebook optie, ze gebruiken bijvoorbeeld bijna altijd OAUTH op de achtergrond, zodat u geen nieuwe gebruikersnaam en een nieuw wachtwoord hoeft te maken met weer een andere website, of uw telefoonnummer aan weer een andere online service hoeft door te geven.
Strikt genomen authenticeert u zich indirect, waarbij u alleen uw Google- of Facebook-inloggegevens op een van die sites invoert.
Sommige gebruikers houden hier niet van, omdat ze zich niet willen authenticeren bij Google of Facebook om hun identiteit te bewijzen aan andere, niet-gerelateerde sites. Anderen vinden het leuk omdat ze ervan uitgaan dat sites zoals Facebook en Google meer ervaring hebben met het afhandelen van het inlogproces, het veilig opslaan van wachtwoord-hashes en het doen van 2FA, dan een boetiekwebsite die heeft geprobeerd zijn eigen cryptografische beveiligingsprocessen te breien.
Uitbestede authenticatie
Sterk vereenvoudigd, een login in OAUTH-stijl, via uw Facebook-account naar een site genaamd example.com
, gaat ongeveer zo:
- De site
example.com
zegt tegen je app of browser, "Hallo, X, haal een magisch toegangstoken voor deze site van Facebook." - Je bezoekt een speciale Facebook-URL, logt in als je dat nog niet hebt gedaan, en zeg: "Geef me een magisch toegangstoken voor
example.com
. ' - Als Facebook ervan overtuigd is dat u bent wie u beweert, het antwoordt: "Hallo, X, hier is je magische toegangstoken."
- U overhandigt het toegangstoken aan
example.com
, die vervolgens zelf contact kan opnemen met Facebook om het token te valideren.
Houd er rekening mee dat alleen Facebook uw Facebook-wachtwoord en 2FA-code ziet, indien nodig, dus de Facebook-service fungeert als authenticatiemakelaar tussen u en example.com
.
Achter de schermen is er een laatste validatie, zoals deze:
- De site
example.com
zegt tegen Facebook, "Heeft u dit token uitgegeven en valideert het gebruiker X?" - Als Facebook akkoord gaat, het zegt
example.com
, "Ja, we beschouwen deze gebruiker als geverifieerd."
Subverteerbare volgorde
De bug die de SALT-onderzoekers in de Expo-code vonden, kan worden geactiveerd door op kwaadaardige wijze Expo's afhandeling van wat je het "authenticatiemakelaardij"-proces zou kunnen noemen, te ondermijnen.
De belangrijkste punten zijn:
- Expo voegt zelf een wrapper toe rond het verificatieproces, zodat het de authenticatie en de validatie voor u afhandelt en uiteindelijk een magisch toegangstoken voor de gewenste website doorgeeft (
example.com
in de uitwisseling hierboven) terug naar de app of website waarmee u verbinding maakt. - De parameters die worden gebruikt bij het afhandelen van de verificatie zijn verpakt in een grote URL die is ingediend bij de Expo-service.
- Een van deze parameters wordt tijdelijk opgeslagen in een webcookie dat specificeert de URL waarnaar het laatste magische beveiligingstoken wordt verzonden om toegang mogelijk te maken.
- Voordat het beveiligingstoken wordt afgeleverd, een pop-up vraagt je om de URL te verifiëren die op het punt staat geautoriseerd te worden, zodat je iedereen kunt betrappen die een nep-URL probeert te vervangen in het aanmeldingsproces.
- Als u de pop-up goedkeurt, Expo leidt u door naar het Facebook-verificatieproces.
- Als Facebook de verificatie goedkeurt, het retourneert een magisch toegangstoken naar de Expo-service en Expo geeft het door aan de URL die u zojuist hebt goedgekeurd in de pop-up, genaamd de
returnURL
. - De app of website luistert op het aangegeven tijdstip
returnURL
ontvangt de terugroepactie van Expo, verwerft het toegangstoken en wordt daarom geverifieerd als u.
Helaas ontdekten de SALT-onderzoekers dat ze het inlogproces konden ondermijnen door JavaScript-code te gebruiken om toegang te krijgen tot de initiële Expo-inlog-URL, maar vervolgens de verificatiepop-up te doden voordat je tijd had om het te lezen of zelf goed te keuren.
Op dat moment had de service van Expo echter al een cookie met de naam geplaatst ru
(kort voor returnURL
) om aan het einde te vertellen waar het moet worden teruggebeld met uw magische toegangstoken.
Dit betekende dat een cybercrimineel de code van Expo kon misleiden om een returnURL
zoals https://roguesite.example
, zonder dat u ooit het dialoogvenster hebt gezien om u te waarschuwen dat er een aanval gaande was, laat staan dat u deze per ongeluk goedkeurde.
Vervolgens gebruikten de onderzoekers een tweede stuk JavaScript-code om de omleiding van Expo naar het verificatieproces van Facebook te simuleren, wat automatisch zou lukken als je (zoals veel mensen) al op Facebook zelf was ingelogd.
De verificatie van Facebooks zou op zijn beurt het Expo-inlogproces omleiden naar Expo's eigen JavaScript-code...
... die vol vertrouwen maar ten onrechte de nooit-werkelijk-geverifieerde zou grijpen returnURL
voor zijn callback van die magie ru
cookie die het in het begin heeft geplaatst, zonder uw goedkeuring of medeweten.
Fail open of fail closed?
Zoals u in de bovenstaande beschrijving kunt zien, werd de kwetsbaarheid veroorzaakt doordat de code van Expo op ongepaste wijze faalde.
Verificatiecode moet in het algemeen mislukt gesloten, in het jargon, wat betekent dat het proces niet zou moeten slagen tenzij er een soort actieve goedkeuring is gesignaleerd.
We gokken dat Expo het systeem niet van plan was mislukt open, gezien het feit dat het rapport van SALT laat zien dat het goedkeuringsdialoogvenster er als volgt uitzag:
De app op https://roguesite.example vraagt je om je aan te melden bij je Facebook-account. Vertrouwt u https://roguesite.example volledig en stemt u ermee in om het te laten: [Nee] [Ja]
Het standaardantwoord was, zoals je zou verwachten, ingesteld op [No]
, maar dit zou er alleen voor zorgen dat het systeem niet kan worden afgesloten als u op een religieuze manier Expo's eigen client-side code gebruikt om het verificatieproces te controleren.
Door hun eigen JavaScript te leveren om de reeks verificatieverzoeken uit te voeren, konden de onderzoekers het goedkeuringsdialoogvenster behandelen alsof het had gezegd:
Als je ons niet expliciet vertelt om https://roguesite.example te blokkeren voor inloggen via je Facebook-account, laten we het doen: [Toestaan] [Blokkeren]
De oplossing was onder meer dat de initiële inlogcode van Expo die magie instelde ru
koekje pas nadat u de zogenaamde returnURL
, zodat de latere JavaScript-inlogcode van Expo niet kon worden gesloten als de verificatie-pop-up werd overgeslagen, in plaats van blindelings te vertrouwen op een URL die u nog nooit had gezien of goedgekeurd.
In veel opzichten lijkt deze bug op de Belkin Wemo slimme stekker bug die we ongeveer twee weken geleden schreven, ook al was de hoofdoorzaak in het geval van Belkin een bufferoverloop, niet een malafide webcallback.
De code van Belkin wees een geheugenbuffer van 68 bytes toe aan de server-side code, maar vertrouwde op het inchecken van de client-side code dat je niet meer dan 68 bytes probeerde te verzenden, waardoor de server overgeleverd werd aan de genade van aanvallers die besloten om met de server te praten met behulp van hun eigen client-side code die het verificatieproces heeft omzeild.
Wat te doen?
- Bij het rapporteren en schrijven van bugs, overweeg om SALT's te volgen voorbeeld. Maak op verantwoorde wijze bekend en geef de verkoper een redelijke tijd om de kwetsbaarheid te verhelpen, plus een redelijke tijd om hun eigen gebruikers te adviseren, alvorens details te publiceren waarmee iemand anders zelf een exploit zou kunnen maken.
- Bij het ontvangen van bugrapporten, overweeg om Expo's te volgen voorbeeld. Reageer snel, houd contact met de melder van de bug, patch de kwetsbaarheid zo snel mogelijk, geef een nuttig onderzoeksrapport voor uw gebruikers en houd het objectief. (Weersta de suggesties van uw marketingteam om uzelf te prijzen omdat u "beveiliging serieus neemt" of om het probleem af te doen als onbelangrijk. Dat is aan uw gebruikers om te beslissen, op basis van de snelheid en relevantie van uw reactie en hun eigen inschatting van het risico.)
- Zorg ervoor dat uw authenticatiecode niet kan worden gesloten. Zorg ervoor dat u geen verificatie- of goedkeuringsstappen heeft die eenvoudig kunnen worden geneutraliseerd door ze te negeren of te annuleren.
- Ga er nooit vanuit dat uw eigen client-side code de controle heeft over het verificatieproces. Ga ervan uit dat aanvallers uw protocol reverse-engineeren en hun eigen clientcode maken om zo veel mogelijk controles te omzeilen.
- Uitloggen van webaccounts wanneer u ze niet actief gebruikt. Veel mensen loggen in op accounts zoals Google, Amazon, Facebook, Apple en anderen, en blijven dan voor onbepaalde tijd ingelogd, omdat het handig is. Uitloggen voorkomt dat veel acties (waaronder authenticaties, berichten, vind-ik-leuks, deelacties en nog veel meer) plaatsvinden wanneer u ze niet verwacht. In plaats daarvan ziet u een inlogprompt.
Vergeet niet dat door uit te loggen bij webservices wanneer u maar kunt en door al uw browsercookies en opgeslagen webgegevens regelmatig te wissen, u ook de hoeveelheid trackinginformatie vermindert die sites over u kunnen verzamelen terwijl u browst.
Immers, als je niet bent ingelogd, en je hebt geen tracking cookies meer van vroeger, weten sites niet meer precies wie je bent, of wat je de vorige keer hebt gedaan.
- Door SEO aangedreven content en PR-distributie. Word vandaag nog versterkt.
- PlatoAiStream. Web3 gegevensintelligentie. Kennis versterkt. Toegang hier.
- De toekomst slaan met Adryenn Ashley. Toegang hier.
- Koop en verkoop aandelen in PRE-IPO-bedrijven met PREIPO®. Toegang hier.
- Bron: https://nakedsecurity.sophos.com/2023/05/30/serious-security-verification-is-vital-examining-an-oauth-login-bug/
- : heeft
- :is
- :niet
- :waar
- $UP
- 1
- 15%
- 2FA
- a
- in staat
- Over
- boven
- absoluut
- toegang
- Account
- accounts
- Koopt
- Handelen
- acties
- actieve
- actief
- Handelingen
- toe te voegen
- Voegt
- advies
- adviseren
- Na
- geleden
- Alles
- toegewezen
- toelaten
- toestaat
- alleen
- al
- ook
- altijd
- Amazone
- onder
- bedragen
- an
- en
- Nog een
- beantwoorden
- elke
- iedereen
- iets
- gebruiken
- Apple
- goedkeuring
- goedkeuren
- goedgekeurd
- apps
- ZIJN
- rond
- dit artikel
- AS
- beoordeling
- At
- aanvallen
- waarmerken
- geverifieerd
- authenticatie
- auteur
- geautoriseerd
- machtiging
- auto
- webmaster.
- vermijd
- terug
- achtergrond
- background-image
- gebaseerde
- BE
- omdat
- geweest
- vaardigheden
- tussen
- Groot
- blindelings
- Blok
- Blog
- grens
- Onder
- makelaar
- browser
- browsercookies
- buffer
- buffer overloop
- Bug
- bugs
- maar
- by
- Bellen
- Dit betekent dat we onszelf en onze geliefden praktisch vergiftigen.
- CAN
- geval
- het worstelen
- Veroorzaken
- veroorzaakt
- Centreren
- kans
- Wijzigingen
- controleren
- Controles
- aanspraak maken op
- opheldering
- klant
- CLOSED
- Cloud
- code
- codering
- verzamelen
- kleur
- komst
- afstand
- Wij verbinden
- Overwegen
- contact
- onder controle te houden
- gemakkelijk
- koekje
- cookies
- kon
- deksel
- en je merk te creëren
- Geloofsbrieven
- cryptografische
- Klanten
- CYBERCRIMINEEL
- gegevens
- beslissen
- beslist
- Standaard
- geleverd
- beschrijving
- gewenste
- detail
- gegevens
- Dialoog
- DEED
- Verteren
- direct
- Openbaren
- onthulling
- Ontslaan
- Display
- do
- doet
- doen
- don
- Dont
- nagesynchroniseerde
- editing
- anders
- in staat stellen
- einde
- Zelfs
- OOIT
- precies
- Onderzoeken
- voorbeeld
- uitwisseling
- verwachten
- ervaring
- uitgelegd
- Exploiteren
- Expo
- FAIL
- bij gebreke
- mislukt
- boeiend
- weinig
- finale
- Bepalen
- vast
- volgend
- volgt
- Voor
- gevonden
- vaak
- oppompen van
- geheel
- algemeen
- krijgen
- Geven
- gegeven
- Vrijgevigheid
- Go
- Goes
- goed
- Kopen Google Reviews
- grijpen
- sterk
- HAD
- hand
- Handvaten
- Behandeling
- gebeurd
- Happening
- Hebben
- Hoogte
- nuttig
- hier
- HOURS
- zweven
- Hoe
- How To
- Echter
- HTTPS
- Identiteit
- if
- geïmplementeerd
- in
- Inclusief
- indirect
- informatie
- eerste
- verkrijgen in plaats daarvan
- voornemens zijn
- in
- onderzoekend
- kwestie
- IT
- HAAR
- zelf
- jargon
- JavaScript
- voor slechts
- Houden
- sleutel
- breien
- blijven
- kennis
- bekend
- Achternaam*
- later
- verlaten
- links
- als
- Het luisteren
- ll
- ingelogd
- logging
- Log in
- langer
- keek
- magie
- maken
- veel
- veel mensen
- Marge
- Marketing
- max-width
- betekenis
- betekende
- Media
- Geheugen
- macht
- fout
- maanden
- meer
- veel
- Genoemd
- Noodzaak
- nodig
- nooit
- New
- nieuws
- geen
- een
- aantal
- OAuth
- doel van de persoon
- of
- korting
- bieden
- aangeboden
- on
- EEN
- online.
- Slechts
- open
- Keuze
- or
- Overige
- Overig
- uit
- over
- het te bezitten.
- verpakt
- parameters
- passes
- Voorbijgaand
- Wachtwoord
- Patch
- Patches
- Paul
- Mensen
- phone
- Plato
- Plato gegevensintelligentie
- PlatoData
- plus
- punt
- punten
- Populair
- positie
- mogelijk
- Berichten
- presenteren
- voorkomt
- privaat
- processen
- Profiel
- Programming
- protocol
- Bewijzen
- zorgen voor
- publiciteit
- gepubliceerde
- Reclame
- doeleinden
- Putting
- snel
- liever
- Lees
- werkelijk
- redelijk
- ontvangt
- ontvangende
- redirect
- verminderen
- vertrouwen
- antwoord
- verslag
- verslaggever
- Rapportage
- Rapporten
- verzoeken
- vereisen
- onderzoekers
- antwoord
- verantwoordelijk
- Retourneren
- rechts
- Risico
- wortel
- lopen
- Zei
- zout
- tevreden
- ervaren
- zegt
- Scenes
- Tweede
- vast
- veiligheid
- beveiligingstoken
- zien
- te zien
- gezien
- ziet
- sturen
- verzonden
- Volgorde
- ernstig
- service
- Diensten
- reeks
- het instellen van
- Aandelen
- Bermuda's
- moet
- Shows
- teken
- gelijk
- vereenvoudigd
- eenvoudigweg
- website
- Locaties
- slim
- So
- Social
- social media
- Posts op sociale media
- solide
- oplossing
- sommige
- iets
- Spoedig
- spreken
- special
- gespecificeerd
- begin
- blijven
- Stappen
- opgeslagen
- ingediend
- slagen
- dergelijk
- het leveren van
- SVG
- system
- Talk
- vertellen
- vertelt
- neem contact
- dat
- De
- hun
- Ze
- harte
- daarom
- Deze
- ze
- dit
- die
- toch?
- drie
- niet de tijd of
- naar
- teken
- toolkit
- top
- Tracking
- overgang
- transparant
- behandelen
- probeerden
- leiden
- veroorzaakt
- Trust
- vertrouwen
- proberen
- BEURT
- twee
- Tenslotte
- voor
- op
- URL
- us
- gebruikt
- Gebruiker
- gebruikers
- gebruik
- BEVESTIG
- bevestiging
- verkoper
- Verificatie
- controleren
- via
- Bezoek
- bezocht
- vitaal
- kwetsbaarheid
- willen
- was
- Manier..
- manieren
- we
- web
- webservices
- Website
- weken
- gegaan
- waren
- Wat
- wanneer
- telkens als
- welke
- WIE
- wil
- Met
- binnen
- zonder
- zou
- het schrijven van
- Verkeerd
- X
- ja
- nog
- u
- Your
- jezelf
- zephyrnet