Forskere hos webkodningssikkerhedsfirmaet SALT har netop offentliggjort en fascinerende beskrivelse af, hvordan de fandt en autentificeringsfejl døbt CVE-2023-28131 i et populært online-app-buildin-værktøjssæt kendt som Expo.
Den gode nyhed er, at Expo svarede virkelig hurtigt til SALTs fejlrapport, der kommer med en rettelse inden for blot et par timer efter SALTs ansvarlige afsløring.
Heldigvis var rettelsen ikke afhængig af, at kunderne downloadede noget, fordi patchen blev implementeret inde i Expos cloud-tjeneste og ikke krævede patches til nogen forudinstallerede apps eller kode på klientsiden.
Expo'er rådgivende forklarede ikke kun, hvad der skete, og hvordan virksomheden fiksede det, men tilbød også programmeringsrådgivning til sine kunder om, hvordan man undgår denne form for mulig sårbarhed med andre onlinetjenester.
SALT ventede derefter tre måneder med at udgive sin rapport, i stedet for at skynde den ud til reklameformål, så snart det kunne, og dermed give Expo-brugere en chance for at fordøje og reagere på Expos svar.
Hold det enkelt
Buggy-godkendelsesprocessen er forklaret i detaljer i SALTs rapport, men vi vil her præsentere en meget forenklet beskrivelse af, hvad der gik galt i Expos OAUTH-tjeneste.
OAUTH udvidelse, forkortelse for Åben autorisationsramme, er en proces, der giver dig adgang til private data i en onlinetjeneste (såsom at redigere din onlineprofil, tilføje en ny blogartikel eller godkende en webtjeneste til at lave opslag på sociale medier for dig), uden nogensinde at oprette en adgangskode med , eller logge direkte ind på selve tjenesten.
Når du ser webtjenester, der tilbyder dig en Log ind med Google eller Facebook mulighed, for eksempel, bruger de næsten altid OAUTH i baggrunden, så du ikke behøver at oprette et nyt brugernavn og en ny adgangskode med endnu en hjemmeside, eller give dit telefonnummer ud til endnu en online-tjeneste.
Strengt taget autentificerer du indirekte og sætter kun dine Google- eller Facebook-legitimationsoplysninger ind på et af disse websteder.
Nogle brugere kan ikke lide dette, fordi de ikke ønsker at autentificere til Google eller Facebook bare for at bevise deres identitet over for andre, ikke-relaterede websteder. Andre kan lide det, fordi de antager, at websteder som Facebook og Google har mere erfaring med at håndtere login-processen, opbevare password-hashes sikkert og lave 2FA, end et boutique-websted, der har forsøgt at strikke sine egne kryptografiske sikkerhedsprocesser.
Outsourcet autentificering
Meget forenklet, et login i OAUTH-stil via din Facebook-konto til et websted kaldet example.com
, lyder sådan her:
- Siden
example.com
siger til din app eller browser, "Hej, X, gå hen og få et magisk adgangstoken til dette websted fra Facebook." - Du besøger en speciel Facebook-URL og logger ind, hvis du ikke allerede har gjort det, og sig: "Giv mig et magisk adgangstegn for
example.com
". - Hvis Facebook er overbevist om, at du er den, du hævder, den svarer: "Hej X, her er dit magiske adgangstoken."
- Du afleverer adgangstokenet til
example.com
, som så selv kan kontakte Facebook for at validere tokenet.
Bemærk, at kun Facebook ser din Facebook-adgangskode og 2FA-kode, hvis det er nødvendigt, så Facebook-tjenesten fungerer som en godkendelsesmægler mellem dig og example.com
.
Bag kulisserne er der en sidste validering, som denne:
- Siden
example.com
siger til Facebook, "Udstedte du dette token, og validerer det bruger X?" - Hvis Facebook er enig, det fortæller
example.com
, "Ja, vi anser denne bruger for at være godkendt."
Subvertibel sekvens
Fejlen, som SALT-forskerne fandt i Expo-koden, kan udløses ved ondsindet at undergrave Expos håndtering af, hvad man kan kalde "godkendelsesmæglering"-processen.
Nøglepunkterne er som følger:
- Expo selv tilføjer en indpakning omkring verifikationsprocessen, så den håndterer godkendelsen og valideringen for dig og i sidste ende sender et magisk adgangstoken til det ønskede websted (
example.com
i udvekslingen ovenfor) tilbage til den app eller hjemmeside, du opretter forbindelse fra. - De parametre, der bruges til at håndtere verifikationen er pakket ind i en stor URL, der sendes til Expo-tjenesten.
- En af disse parametre gemmes midlertidigt i en webcookie der angiver den URL, som det endelige magiske sikkerhedstoken vil blive sendt til for at aktivere adgang.
- Inden sikkerhedstokenet leveres, en popup beder dig om at bekræfte den URL, der er ved at blive godkendt, så du kan fange alle, der forsøger at erstatte en falsk URL i login-processen.
- Hvis du godkender pop op-vinduet, Expo omdirigerer dig til Facebook-bekræftelsesprocessen.
- Hvis Facebook godkender bekræftelsen, det returnerer et magisk adgangstoken til Expo-tjenesten, og Expo sender det videre til den URL, du lige har godkendt i pop op-vinduet, kaldet
returnURL
. - Appen eller webstedet lytter til det angivne
returnURL
modtager Expos tilbagekald, anskaffer adgangstokenet og bliver derfor godkendt som dig.
Desværre fandt SALT-forskerne ud af, at de kunne undergrave login-processen ved at bruge JavaScript-kode til at udløse adgang til den oprindelige Expo-login-URL, men derefter afbryde bekræftelsespop-up'en, før du nåede at læse den eller selv godkende den.
På dette tidspunkt havde Expos service dog allerede sat en cookie med navnet ru
(forkortelse for returnURL
) for at fortælle den, hvor den skal ringe tilbage med dit magiske adgangstoken til sidst.
Det betød, at en cyberkriminel kunne narre Expos kode til at "huske" en returnURL
såsom https://roguesite.example
, uden at du nogensinde ser dialogen for at advare dig om, at et angreb var undervejs, endsige at godkende det ved en fejltagelse.
Derefter brugte forskerne endnu en luns JavaScript-kode til at simulere Expos omdirigering til Facebooks verifikationsproces, hvilket automatisk ville lykkes, hvis du (som mange andre) allerede var logget ind på Facebook selv.
Facebooks bekræftelse ville til gengæld omdirigere Expo login-processen tilbage til Expos egen JavaScript-kode...
…som tillidsfuldt, men fejlagtigt ville gribe de aldrig-faktisk-verificerede returnURL
for dets tilbagekald fra den magi ru
cookie, som den satte i starten, uden din godkendelse eller viden.
Fejl åben eller fejl lukket?
Som du kan se af beskrivelsen ovenfor, var sårbarheden forårsaget af, at Expos kode fejlede uhensigtsmæssigt.
Godkendelseskode bør generelt fejl lukket, i jargonen, hvilket betyder, at processen ikke skal lykkes, medmindre en form for aktiv godkendelse er blevet signaleret.
Vi gætter på, at Expo ikke havde til hensigt, at systemet skulle mislykkes åben, da SALTs rapport viser, at dens popup-godkendelsesdialog så ud som følger:
Appen på https://roguesite.example beder dig om at logge ind på din Facebook-konto. Har du fuld tillid til https://roguesite.example og accepterer at lade det: [Nej] [Ja]
Standardsvaret var, som du ville forvente, indstillet til [No]
, men dette ville kun få systemet til at fejle lukket, hvis du religiøst brugte Expos egen kode på klientsiden til at kontrollere verifikationsprocessen.
Ved at levere deres eget JavaScript til at køre sekvensen af bekræftelsesanmodninger, var forskerne i stand til at behandle godkendelsesdialogen, som om den havde sagt:
Hvis du ikke udtrykkeligt fortæller os at blokere https://roguesite.example fra at logge ind via din Facebook-konto, lader vi det gøre det: [Tillad] [Bloker]
Løsningen, blandt andre ændringer, var, at Expos indledende login-kode skulle sætte den magi ru
cookie først efter at du udtrykkeligt havde godkendt den såkaldte returnURL
, så Expo's senere JavaScript login-kode ville mislykkes lukket, hvis bekræftelsespop-up'et blev sprunget over, i stedet for blindt at stole på en URL, som du aldrig havde set eller godkendt.
På mange måder ligner denne fejl Belkin Wemo Smart-stik fejl, som vi skrev for to uger siden, selvom grundårsagen i Belkins tilfælde var et bufferoverløb, ikke et slyngelagtigt web-tilbagekald.
Belkins kode tildelte en 68-byte hukommelsesbuffer i sin server-side kode, men stolede på at tjekke sin klient-side kode ind, at du ikke forsøgte at sende mere end 68 bytes, og dermed overlade serveren til angribernes nåde, der besluttede at tale med serveren ved hjælp af deres egen kode på klientsiden, der omgik verifikationsprocessen.
Hvad skal jeg gøre?
- Når du rapporterer og skriver fejl, overveje at følge SALT'er eksempel. Fortæl ansvarligt, og giv leverandøren en rimelig tid til at rette op på sårbarheden, plus en rimelig tid til at rådgive deres egne brugere, før de offentliggør detaljer, der ville give andre mulighed for at skabe deres egen udnyttelse.
- Når du modtager fejlrapporter, overveje at følge Expo's eksempel. Svar hurtigt, hold kontakten med reporteren af fejlen, patch sårbarheden så snart du kan, giv en nyttig undersøgelsesrapport til dine brugere, og hold den objektiv. (Modstå dit marketingteams forslag for at rose dig selv for at "tage sikkerhed alvorligt" eller for at afvise problemet som uvigtigt. Det er op til dine brugere at beslutte, baseret på hurtigheden og relevansen af dit svar og deres egen vurdering af risikoen.)
- Sørg for, at din godkendelseskode ikke lukkes. Sørg for, at du ikke har verifikations- eller godkendelsestrin, der kan neutraliseres ved blot at ignorere eller annullere dem.
- Gå aldrig ud fra, at din egen kode på klientsiden vil have kontrol over verifikationsprocessen. Antag, at angribere vil reverse-engineere din protokol og skabe deres egen klientkode for at omgå så mange kontroller, som de kan.
- Log ud af webkonti, når du ikke aktivt bruger dem. Mange mennesker logger ind på konti som Google, Amazon, Facebook, Apple og andre, og forbliver så logget ind på ubestemt tid, fordi det er praktisk. Log ud forhindrer mange handlinger (herunder godkendelser, opslag, likes, delinger og meget mere) i at ske, når du ikke forventer dem – du vil i stedet se en login-prompt.
Glem ikke, at ved at logge ud af webtjenester, når du kan, og ved at rydde alle dine browsercookies og gemte webdata ofte, reducerer du også mængden af sporingsoplysninger, som websteder kan indsamle om dig, mens du browser.
Når alt kommer til alt, hvis du ikke er logget ind, og du ikke har nogen sporingscookies tilovers fra før, ved siderne ikke længere præcis, hvem du er, eller hvad du gjorde sidst, du besøgte.
- SEO Powered Content & PR Distribution. Bliv forstærket i dag.
- PlatoAiStream. Web3 Data Intelligence. Viden forstærket. Adgang her.
- Udmøntning af fremtiden med Adryenn Ashley. Adgang her.
- Køb og sælg aktier i PRE-IPO-virksomheder med PREIPO®. Adgang her.
- Kilde: https://nakedsecurity.sophos.com/2023/05/30/serious-security-verification-is-vital-examining-an-oauth-login-bug/
- :har
- :er
- :ikke
- :hvor
- $OP
- 1
- 15 %
- 2FA
- a
- I stand
- Om
- over
- absolutte
- adgang
- Konto
- Konti
- Overtager
- Lov
- aktioner
- aktiv
- aktivt
- handlinger
- tilføje
- Tilføjer
- rådgivning
- rådgive
- Efter
- siden
- Alle
- allokeret
- tillade
- tillader
- alene
- allerede
- også
- altid
- Amazon
- blandt
- beløb
- an
- ,
- En anden
- besvare
- enhver
- nogen
- noget
- app
- Apple
- godkendelse
- Godkend
- godkendt
- apps
- ER
- omkring
- artikel
- AS
- vurdering
- At
- angribe
- autentificere
- autentificeret
- Godkendelse
- forfatter
- autoriseret
- tilladelse
- auto
- automatisk
- undgå
- tilbage
- baggrund
- background-billede
- baseret
- BE
- fordi
- været
- før
- mellem
- Big
- blindt
- Bloker
- Blog
- grænse
- Bund
- mægler
- browser
- browser-cookies
- buffer
- bufferoverløb
- Bug
- bugs
- men
- by
- ringe
- kaldet
- CAN
- tilfælde
- brydning
- Årsag
- forårsagede
- center
- chance
- Ændringer
- kontrol
- Kontrol
- krav
- Rydning
- kunde
- lukket
- Cloud
- kode
- Kodning
- indsamler
- farve
- kommer
- selskab
- Tilslutning
- Overvej
- kontakt
- kontrol
- Praktisk
- cookie
- cookies
- kunne
- dæksel
- skabe
- Legitimationsoplysninger
- kryptografisk
- Kunder
- CYBERKRIMINAL
- data
- beslutte
- besluttede
- Standard
- leveret
- beskrivelse
- ønskes
- detail
- detaljer
- dialog
- DID
- Fordøje
- direkte
- offentliggøre
- videregivelse
- Luk
- Skærm
- do
- gør
- gør
- Don
- Dont
- døbt
- redigering
- andet
- muliggøre
- ende
- Endog
- NOGENSINDE
- præcist nok
- Undersøgelse
- eksempel
- udveksling
- forvente
- erfaring
- forklarede
- Exploit
- Expo
- FAIL
- svigtende
- mislykkes
- fascinerende
- få
- endelige
- Fix
- fast
- efter
- følger
- Til
- fundet
- hyppigt
- fra
- fuldt ud
- generelt
- få
- Giv
- given
- Give
- Go
- Goes
- godt
- grab
- stærkt
- havde
- hånd
- Håndterer
- Håndtering
- skete
- Happening
- Have
- højde
- hjælpsom
- link.
- HOURS
- hover
- Hvordan
- How To
- Men
- HTTPS
- Identity
- if
- implementeret
- in
- Herunder
- indirekte
- oplysninger
- initial
- i stedet
- hensigt
- ind
- undersøgende
- spørgsmål
- IT
- ITS
- selv
- jargon
- JavaScript
- lige
- Holde
- Nøgle
- strikke
- Kend
- viden
- kendt
- Efternavn
- senere
- forlader
- til venstre
- ligesom
- Lytte
- ll
- logget
- logning
- Logge på
- længere
- kiggede
- Magic
- lave
- mange
- mange mennesker
- Margin
- Marketing
- max-bredde
- betyder
- betød
- Medier
- Hukommelse
- måske
- fejltagelse
- måned
- mere
- meget
- Som hedder
- Behov
- behov
- aldrig
- Ny
- nyheder
- ingen
- normal
- nummer
- oauth
- objektiv
- of
- off
- tilbyde
- tilbydes
- on
- ONE
- online
- kun
- åbent
- Option
- or
- Andet
- Andre
- ud
- i løbet af
- egen
- pakket
- parametre
- gennemløb
- Passing
- Adgangskode
- patch
- Patches
- paul
- Mennesker
- telefon
- plato
- Platon Data Intelligence
- PlatoData
- plus
- Punkt
- punkter
- Populær
- position
- mulig
- Indlæg
- præsentere
- forhindrer
- private
- behandle
- Processer
- Profil
- Programmering
- protokol
- Bevise
- give
- reklame
- offentliggjort
- Publicering
- formål
- Sætte
- hurtigt
- hellere
- Læs
- virkelig
- rimelige
- modtager
- modtagende
- omdirigere
- reducere
- stole
- svar
- indberette
- reporter
- Rapportering
- Rapporter
- anmodninger
- kræver
- forskere
- svar
- ansvarlige
- afkast
- højre
- Risiko
- rod
- Kør
- Said
- salt
- tilfreds
- siger
- siger
- scener
- Anden
- sikkert
- sikkerhed
- sikkerhedsbogstav
- se
- se
- set
- Sees
- send
- sendt
- Sequence
- alvorlig
- tjeneste
- Tjenester
- sæt
- indstilling
- Aktier
- Kort
- bør
- Shows
- underskrive
- lignende
- forenklet
- ganske enkelt
- websted
- Websteder
- Smart
- So
- Social
- sociale medier
- Indlæg på sociale medier
- solid
- løsninger
- nogle
- noget
- Snart
- taler
- særligt
- specificeret
- starte
- forblive
- Steps
- opbevaret
- indsendt
- lykkes
- sådan
- leverer
- SVG
- systemet
- Tal
- fortælle
- fortæller
- end
- at
- deres
- Them
- derefter
- derfor
- Disse
- de
- denne
- dem
- selvom?
- tre
- tid
- til
- token
- toolkit
- top
- Sporing
- overgang
- gennemsigtig
- behandle
- forsøgte
- udløse
- udløst
- Stol
- tillidsfuld
- prøv
- TUR
- to
- Ultimativt
- under
- på
- URL
- us
- anvendte
- Bruger
- brugere
- ved brug af
- VALIDATE
- validering
- sælger
- Verifikation
- verificere
- via
- Besøg
- besøgte
- afgørende
- sårbarhed
- ønsker
- var
- Vej..
- måder
- we
- web
- webservices
- Hjemmeside
- uger
- gik
- var
- Hvad
- hvornår
- når
- som
- WHO
- vilje
- med
- inden for
- uden
- ville
- skrivning
- Forkert
- X
- Ja
- endnu
- dig
- Din
- dig selv
- zephyrnet