Forskere ved nettkodingssikkerhetsselskapet SALT publiserte nettopp en fascinerende beskrivelse av hvordan de fant en autentiseringsfeil dubbet CVE-2023-28131 i et populært nettbasert verktøysett for appbygging kjent som Expo.
Den gode nyheten er at Expo svarte veldig raskt til SALTs feilrapport, og kommer med en løsning innen bare noen få timer etter SALTs ansvarlige avsløring.
Heldigvis var ikke løsningen avhengig av at kundene lastet ned noe, fordi oppdateringen ble implementert i Expos skytjeneste, og krevde ikke oppdateringer til noen forhåndsinstallerte apper eller kode på klientsiden.
Expo'er rådgivende forklarte ikke bare hva som skjedde og hvordan selskapet fikset det, men tilbød også programmeringsråd til sine kunder om hvordan de kan unngå denne typen mulig sårbarhet med andre nettjenester.
SALT ventet deretter tre måneder før han publiserte rapporten, i stedet for å skynde den ut for publisitetsformål så snart den kunne, og dermed gi Expo-brukere en sjanse til å fordøye og reagere på Expos svar.
Holde det enkelt
Buggy-autentiseringsprosessen er forklart i detalj i SALTs rapport, men vi vil presentere en sterkt forenklet beskrivelse her av hva som gikk galt i Expos OAUTH-tjeneste.
OAUTH, kort for Åpen autorisasjonsramme, er en prosess som lar deg få tilgang til private data i en nettbasert tjeneste (for eksempel å redigere nettprofilen din, legge til en ny bloggartikkel eller godkjenne en nettjeneste for å lage innlegg i sosiale medier for deg), uten noen gang å sette opp et passord med , eller logge direkte på selve tjenesten.
Når du ser webtjenester som tilbyr deg en Logg på med Google eller Facebook alternativ, for eksempel, bruker de nesten alltid OAUTH i bakgrunnen, slik at du ikke trenger å opprette et nytt brukernavn og et nytt passord med enda et nettsted, eller gi telefonnummeret ditt til enda en annen nettjeneste.
Strengt tatt autentiserer du indirekte, og legger bare Google- eller Facebook-legitimasjonen din inn på ett av disse nettstedene.
Noen brukere liker ikke dette, fordi de ikke ønsker å autentisere til Google eller Facebook bare for å bevise identiteten deres til andre, urelaterte nettsteder. Andre liker det fordi de antar at nettsteder som Facebook og Google har mer erfaring med å håndtere påloggingsprosessen, lagre passord-hasher sikkert og gjøre 2FA, enn et boutiquenettsted som har prøvd å strikke sine egne kryptografiske sikkerhetsprosesser.
Outsourcet autentisering
Svært forenklet, en OAUTH-stil pålogging, via Facebook-kontoen din til et nettsted kalt example.com
, går omtrent slik:
- Siden
example.com
sier til appen eller nettleseren din, "Hei, X, gå og få et magisk tilgangstoken for dette nettstedet fra Facebook." - Du besøker en spesiell Facebook-URL, logger på hvis du ikke allerede har gjort det, og si: «Gi meg et magisk tilgangstegn for
example.com
». - Hvis Facebook er fornøyd med at du er den du påstår, den svarer: "Hei, X, her er ditt magiske tilgangstegn."
- Du leverer tilgangstokenet til
example.com
, som så kan kontakte Facebook selv for å validere tokenet.
Merk at bare Facebook ser Facebook-passordet og 2FA-koden, hvis nødvendig, så Facebook-tjenesten fungerer som en autentiseringsmegler mellom deg og example.com
.
Bak kulissene er det en endelig validering, som dette:
- Siden
example.com
sier til Facebook, "Utstedte du dette tokenet, og validerer det bruker X?" - Hvis Facebook samtykker, det forteller
example.com
, "Ja, vi anser denne brukeren for å være autentisert."
Subvertible sekvens
Feilen som SALT-forskerne fant i Expo-koden kan utløses ved ondsinnet å undergrave Expos håndtering av det du kan kalle "autentiseringsmeglingsprosessen".
Hovedpunktene er som følger:
- Expo selv legger til en innpakning rundt bekreftelsesprosessen, slik at den håndterer autentiseringen og valideringen for deg, og til slutt sender et magisk tilgangstoken for ønsket nettsted (
example.com
i utvekslingen ovenfor) tilbake til appen eller nettstedet du kobler til fra. - Parametrene som brukes i håndteringen av verifiseringen er pakket inn i en stor URL som sendes til Expo-tjenesten.
- En av disse parameterne lagres midlertidig i en nettinformasjonskapsel som spesifiserer URL-en som det endelige magiske sikkerhetstokenet vil bli sendt til for å aktivere tilgang.
- Før sikkerhetstokenet leveres, en popup ber deg om å bekrefte URL-en som er i ferd med å bli autorisert, slik at du kan fange opp alle som prøver å erstatte en falsk URL i påloggingsprosessen.
- Hvis du godkjenner popup-vinduet, Expo omdirigerer deg til Facebook-verifiseringsprosessen.
- Hvis Facebook godkjenner bekreftelsen, den returnerer et magisk tilgangstoken til Expo-tjenesten, og Expo sender det videre til URL-en du nettopp godkjente i popup-vinduet, kalt
returnURL
. - Appen eller nettstedet lytter til det spesifiserte
returnURL
mottar Expos tilbakeringing, skaffer seg tilgangstoken, og blir derfor autentisert som deg.
Dessverre fant SALT-forskerne ut at de kunne undergrave påloggingsprosessen ved å bruke JavaScript-kode for å utløse tilgang til den opprinnelige Expo-påloggings-URLen, men deretter drepe verifiseringspopupen før du rakk å lese den eller godkjenne den selv.
På dette tidspunktet hadde imidlertid Expos tjeneste allerede satt en informasjonskapsel med navn ru
(kort for returnURL
) for å fortelle den hvor den skal ringe tilbake med ditt magiske tilgangstoken på slutten.
Dette betydde at en nettkriminell kunne lure Expos kode til å "huske" en returnURL
slik som https://roguesite.example
, uten at du noen gang ser dialogboksen for å advare deg om at et angrep var i gang, for ikke å snakke om å godkjenne det ved en feiltakelse.
Deretter brukte forskerne en annen del av JavaScript-kode for å simulere Expos omdirigering til Facebooks bekreftelsesprosess, som automatisk ville lykkes hvis (som mange andre) du allerede var logget på Facebook selv.
Facebooks bekreftelse vil på sin side omdirigere Expo-påloggingsprosessen tilbake til Expos egen JavaScript-kode ...
…som tillitsfullt, men feilaktig ville ta tak i de aldri-faktisk-verifiserte returnURL
for tilbakeringingen fra den magien ru
informasjonskapsel som den satte i starten, uten din godkjenning eller viten.
Feil åpen eller feil lukket?
Som du kan se fra beskrivelsen ovenfor, var sårbarheten forårsaket av at Expos kode sviktet upassende.
Autentiseringskode bør generelt fail lukket, i sjargongen, noe som betyr at prosessen ikke skal lykkes med mindre en form for aktiv godkjenning har blitt signalisert.
Vi tipper at Expo ikke hadde til hensikt at systemet skulle det mislykkes åpen, gitt at SALTs rapport viser at popup-godkjenningsdialogen så slik ut:
Appen på https://roguesite.example ber deg logge på Facebook-kontoen din. Stoler du fullt og helt på https://roguesite.example og godtar å la det: [Nei] [Ja]
Standardsvaret, som du forventer, ble satt til [No]
, men dette vil bare føre til at systemet ikke lukkes hvis du religiøst brukte Expos egen kode på klientsiden for å kontrollere bekreftelsesprosessen.
Ved å levere sin egen JavaScript for å kjøre sekvensen av bekreftelsesforespørsler, var forskerne i stand til å behandle godkjenningsdialogen som om den hadde sagt:
Hvis du ikke eksplisitt ber oss om å blokkere https://roguesite.example fra å logge på via Facebook-kontoen din, lar vi det gjøre det: [Tillat] [Blokkér]
Løsningen, blant andre endringer, var at Expos første påloggingskode for å sette den magien ru
cookie først etter at du eksplisitt hadde godkjent den såkalte returnURL
, slik at Expos senere JavaScript-påloggingskode ville mislykkes lukket hvis bekreftelsespopupen ble hoppet over, i stedet for blindt å stole på en URL som du aldri hadde sett eller godkjent.
På mange måter ligner denne feilen på Belkin Wemo Smart Plug feil som vi skrev for omtrent to uker siden, selv om grunnårsaken i Belkins tilfelle var et bufferoverløp, ikke en useriøs tilbakeringing på nettet.
Belkins kode tildelte en 68-byte minnebuffer i koden på serversiden, men var avhengig av å sjekke inn koden på klientsiden at du ikke prøvde å sende mer enn 68 byte, og dermed overlatt serveren til angripere som bestemte å snakke med serveren ved å bruke sin egen klientkode som omgikk bekreftelsesprosessen.
Hva gjør jeg?
- Når du rapporterer og skriver opp feil, vurdere å følge SALT eksempel. Avsløre ansvarlig, gi leverandøren rimelig tid til å fikse sårbarheten, pluss en rimelig tid til å gi råd til sine egne brukere, før de publiserer detaljer som vil tillate andre å lage en egen utnyttelse.
- Når du mottar feilrapporter, vurdere å følge Expo's eksempel. Svar raskt, hold kontakten med reporteren av feilen, lapp sikkerhetsproblemet så snart du kan, gi en nyttig etterforskningsrapport for brukerne dine, og hold den objektiv. (Motstå markedsføringsteamets forslag for å prise deg selv for å "ta sikkerhet på alvor" eller for å avvise problemet som uviktig. Det er opp til brukerne dine å bestemme, basert på hurtigheten og relevansen av svaret ditt, og deres egen vurdering av risikoen.)
- Sørg for at autentiseringskoden din ikke lukkes. Sørg for at du ikke har bekreftelses- eller godkjenningstrinn som kan nøytraliseres ved å ignorere eller avbryte dem.
- Anta aldri at din egen kode på klientsiden vil ha kontroll over bekreftelsesprosessen. Anta at angripere vil reversere protokollen din og lage egen klientkode for å omgå så mange kontroller som de kan.
- Logg ut av nettkontoer når du ikke bruker dem aktivt. Mange logger på kontoer som Google, Amazon, Facebook, Apple og andre, og forblir deretter pålogget på ubestemt tid, fordi det er praktisk. Utlogging forhindrer mange handlinger (inkludert autentiseringer, innlegg, likes, delinger og mye mer) fra å skje når du ikke forventer dem – du vil se en påloggingsforespørsel i stedet.
Ikke glem at ved å logge ut av nettjenester når du kan, og ved å slette alle nettleserinformasjonskapsler og lagrede nettdata ofte, reduserer du også mengden sporingsinformasjon som nettsteder kan samle inn om deg mens du surfer.
Tross alt, hvis du ikke er logget inn, og du ikke har noen sporingsinformasjonskapsler til overs fra før, vet ikke sidene lenger nøyaktig hvem du er, eller hva du gjorde sist du besøkte.
- SEO-drevet innhold og PR-distribusjon. Bli forsterket i dag.
- PlatoAiStream. Web3 Data Intelligence. Kunnskap forsterket. Tilgang her.
- Minting the Future med Adryenn Ashley. Tilgang her.
- Kjøp og selg aksjer i PRE-IPO-selskaper med PREIPO®. Tilgang her.
- kilde: https://nakedsecurity.sophos.com/2023/05/30/serious-security-verification-is-vital-examining-an-oauth-login-bug/
- : har
- :er
- :ikke
- :hvor
- $OPP
- 1
- 15%
- 2FA
- a
- I stand
- Om oss
- ovenfor
- Absolute
- adgang
- Logg inn
- kontoer
- kjøper
- Handling
- handlinger
- aktiv
- aktivt
- handlinger
- legge
- Legger
- råd
- råde
- Etter
- siden
- Alle
- allokert
- tillate
- tillater
- alene
- allerede
- også
- alltid
- Amazon
- blant
- beløp
- an
- og
- En annen
- besvare
- noen
- noen
- hva som helst
- app
- eple
- godkjenning
- godkjenne
- godkjent
- apps
- ER
- rundt
- Artikkel
- AS
- evaluering
- At
- angripe
- godkjenne
- autentisert
- Autentisering
- forfatter
- autorisert
- autorisasjon
- auto
- automatisk
- unngå
- tilbake
- bakgrunn
- background-image
- basert
- BE
- fordi
- vært
- før du
- mellom
- Stor
- blindt
- Blokker
- Blogg
- grensen
- Bunn
- megler
- nett~~POS=TRUNC leseren~~POS=HEADCOMP
- nettleser informasjonskapsler
- buffer
- bufferoverløp
- Bug
- bugs
- men
- by
- ring
- som heter
- CAN
- saken
- Catch
- Årsak
- forårsaket
- sentrum
- sjanse
- Endringer
- kontroll
- Sjekker
- hevder
- Clearing
- kunde
- stengt
- Cloud
- kode
- Koding
- samle
- farge
- kommer
- Selskapet
- Tilkobling
- Vurder
- kontakt
- kontroll
- Praktisk
- cookie
- cookies
- kunne
- dekke
- skape
- Credentials
- kryptografisk
- Kunder
- CYBERKRIMINELL
- dato
- bestemme
- besluttet
- Misligholde
- levert
- beskrivelse
- ønsket
- detalj
- detaljer
- Dialog
- gJORDE
- Fordøye
- direkte
- Avsløre
- avsløring
- Forkast
- Vise
- do
- gjør
- gjør
- Don
- ikke
- dubbet
- redigering
- ellers
- muliggjøre
- slutt
- Selv
- NOEN GANG
- nøyaktig
- undersøke
- eksempel
- utveksling
- forvente
- erfaring
- forklarte
- Exploit
- Expo
- FAIL
- sviktende
- mislykkes
- fascinerende
- Noen få
- slutt~~POS=TRUNC
- Fix
- fikset
- etter
- følger
- Til
- funnet
- ofte
- fra
- fullt
- generelt
- få
- Gi
- gitt
- Giving
- Go
- Går
- god
- grip
- sterkt
- HAD
- hånd
- Håndterer
- Håndtering
- skjedde
- Skjer
- Ha
- høyde
- nyttig
- her.
- TIMER
- hover
- Hvordan
- Hvordan
- Men
- HTTPS
- Identitet
- if
- implementert
- in
- Inkludert
- indirekte
- informasjon
- innledende
- i stedet
- hensikt
- inn
- etterforskende
- utstedelse
- IT
- DET ER
- selv
- sjargong
- Javascript
- bare
- Hold
- nøkkel
- strikke
- Vet
- kunnskap
- kjent
- Siste
- seinere
- forlater
- venstre
- i likhet med
- Lytting
- ll
- logget
- logging
- Logg inn
- lenger
- så
- magi
- gjøre
- mange
- mange folk
- Margin
- Marketing
- max bredde
- betyr
- ment
- Media
- Minne
- kunne
- feil
- måneder
- mer
- mye
- oppkalt
- Trenger
- nødvendig
- aldri
- Ny
- nyheter
- Nei.
- normal
- Antall
- oauth
- Målet
- of
- off
- tilby
- tilbudt
- on
- ONE
- på nett
- bare
- åpen
- Alternativ
- or
- Annen
- andre
- ut
- enn
- egen
- pakket
- parametere
- passerer
- Passerer
- Passord
- patch
- Patches
- paul
- Ansatte
- telefon
- plato
- Platon Data Intelligence
- PlatonData
- i tillegg til
- Point
- poeng
- Populær
- posisjon
- mulig
- innlegg
- presentere
- forhindrer
- privat
- prosess
- Prosesser
- Profil
- Programmering
- protokollen
- Bevis
- gi
- publisitet
- publisert
- Publisering
- formål
- Sette
- raskt
- heller
- Lese
- virkelig
- rimelig
- mottar
- mottak
- omdirigere
- redusere
- avhengige
- svar
- rapporterer
- reporter
- Rapportering
- Rapporter
- forespørsler
- krever
- forskere
- svar
- ansvarlig
- avkastning
- ikke sant
- Risiko
- root
- Kjør
- Sa
- salt
- fornøyd
- sier
- sier
- Scener
- Sekund
- sikkert
- sikkerhet
- sikkerhetstegn
- se
- se
- sett
- Sees
- send
- sendt
- Sequence
- alvorlig
- tjeneste
- Tjenester
- sett
- innstilling
- Aksjer
- Kort
- bør
- Viser
- undertegne
- lignende
- forenklet
- ganske enkelt
- nettstedet
- Nettsteder
- Smart
- So
- selskap
- sosiale medier
- Sosiale medier innlegg
- solid
- løsning
- noen
- noe
- Snart
- sett
- spesiell
- spesifisert
- Begynn
- opphold
- Steps
- lagret
- innsendt
- lykkes
- slik
- forsyne
- SVG
- system
- Snakk
- fortelle
- forteller
- enn
- Det
- De
- deres
- Dem
- deretter
- derfor
- Disse
- de
- denne
- De
- selv om?
- tre
- tid
- til
- token
- verktøykasse
- topp
- Sporing
- overgang
- gjennomsiktig
- behandle
- prøvd
- utløse
- utløst
- Stol
- stole på
- prøve
- SVING
- to
- Til syvende og sist
- etter
- upon
- URL
- us
- brukt
- Bruker
- Brukere
- ved hjelp av
- VALIDERE
- validering
- leverandør
- Verifisering
- verifisere
- av
- Besøk
- besøkte
- vital
- sårbarhet
- ønsker
- var
- Vei..
- måter
- we
- web
- webtjenester
- Nettsted
- uker
- gikk
- var
- Hva
- når
- når som helst
- hvilken
- HVEM
- vil
- med
- innenfor
- uten
- ville
- skriving
- Feil
- X
- ja
- ennå
- du
- Din
- deg selv
- zephyrnet