Forskare vid webbkodningssäkerhetsföretaget SALT publicerade just en fascinerande beskrivning av hur de hittade en autentiseringsfel dubbade CVE-2023-28131 i ett populärt verktyg för att bygga appar online som kallas Expo.
Den goda nyheten är att Expo svarade riktigt snabbt till SALT:s felrapport, och kommer med en fix inom bara några timmar efter SALT:s ansvarsfulla avslöjande.
Lyckligtvis förlitade sig korrigeringen inte på att kunderna laddade ner något, eftersom patchen implementerades i Expos molntjänst, och krävde inte patchar till några förinstallerade appar eller kod på klientsidan.
Expo rådgivande förklarade inte bara vad som hände och hur företaget fixade det, utan erbjöd också programmeringsråd till sina kunder om hur man undviker denna typ av möjlig sårbarhet med andra onlinetjänster.
SALT väntade sedan tre månader innan de publicerade sin rapport, snarare än att skynda ut den i publicitetssyfte så snart den kunde, vilket gav Expo-användare en chans att smälta och agera på Expos svar.
Att hålla det enkelt
Buggy-autentiseringsprocessen förklaras i detalj i SALTs rapport, men vi kommer att presentera en mycket förenklad beskrivning här av vad som gick fel i Expos OAUTH-tjänst.
OAUTH, Förkortning av Open Authorization Framework, är en process som låter dig komma åt privata data i en onlinetjänst (som att redigera din onlineprofil, lägga till en ny bloggartikel eller godkänna en webbtjänst för att göra inlägg på sociala medier åt dig), utan att någonsin ställa in ett lösenord med , eller logga direkt in på själva tjänsten.
När du ser webbtjänster som erbjuder dig en Logga in med Google eller Facebook alternativ, till exempel, använder de nästan alltid OAUTH i bakgrunden, så att du inte behöver skapa ett nytt användarnamn och ett nytt lösenord med ännu en webbplats, eller ge ditt telefonnummer till ännu en onlinetjänst.
Strängt taget autentiseras du indirekt och lägger bara in dina Google- eller Facebook-uppgifter på en av dessa webbplatser.
Vissa användare gillar inte detta, eftersom de inte vill autentisera till Google eller Facebook bara för att bevisa sin identitet för andra, orelaterade webbplatser. Andra gillar det eftersom de antar att sajter som Facebook och Google har mer erfarenhet av att hantera inloggningsprocessen, lagra lösenordshaschar säkert och göra 2FA, än en boutiquewebbplats som har försökt knyta ihop sina egna kryptografiska säkerhetsprocesser.
Outsourcade autentisering
Mycket förenklat, en inloggning i OAUTH-stil, via ditt Facebook-konto till en webbplats som heter example.com
, går ungefär så här:
- Platsen
example.com
säger till din app eller webbläsare, "Hej, X, gå och skaffa en magisk åtkomsttoken för den här webbplatsen från Facebook." - Du besöker en speciell Facebook-URL, loggar in om du inte redan har gjort det, och säg, "Ge mig en magisk åtkomsttoken för
example.com
. " - Om Facebook är övertygad om att du är den du hävdar, den svarar, "Hej X, här är din magiska åtkomsttoken."
- Du lämnar åtkomstbrickan till
example.com
, som sedan kan kontakta Facebook själv för att validera token.
Observera att endast Facebook ser ditt Facebook-lösenord och 2FA-kod, om det behövs, så Facebook-tjänsten fungerar som en autentiseringsmäklare mellan dig och example.com
.
Bakom kulisserna finns en sista validering, så här:
- Platsen
example.com
säger till Facebook, "Utfärdade du denna token och validerar den användare X?" - Om Facebook går med på det berättar
example.com
, "Ja, vi anser att den här användaren är autentiserad."
Subvertibel sekvens
Buggan som SALT-forskarna hittade i Expo-koden kan utlösas genom att med uppsåt undergräva Expos hantering av vad du kan kalla processen för "autentiseringsmäklare".
Viktiga punkter är följande:
- Expo själv lägger till ett omslag runt verifieringsprocessen, så att den hanterar autentiseringen och valideringen åt dig, och i slutändan skickar en magisk åtkomsttoken för den önskade webbplatsen (
example.com
i utbytet ovan) tillbaka till appen eller webbplatsen du ansluter från. - De parametrar som används för att hantera verifieringen är packade i en stor URL som skickas till Expo-tjänsten.
- En av dessa parametrar lagras tillfälligt i en webbcookie som anger webbadressen till vilken den sista magiska säkerhetstoken ska skickas för att möjliggöra åtkomst.
- Innan säkerhetstoken levereras, ett popup-fönster ber dig att verifiera webbadressen som är på väg att auktoriseras, så att du kan fånga upp alla som försöker ersätta en falsk URL i inloggningsprocessen.
- Om du godkänner popup-fönstret, Expo omdirigerar dig till Facebook-verifieringsprocessen.
- Om Facebook godkänner verifieringen, den returnerar en magisk åtkomsttoken till Expo-tjänsten och Expo skickar den vidare till URL:en du just godkände i popup-fönstret, kallad
returnURL
. - Appen eller webbplatsen lyssnar på den angivna
returnURL
tar emot Expos återuppringning, skaffar åtkomsttoken och är därför autentiserad som du.
Tyvärr fann SALT-forskarna att de kunde undergräva inloggningsprocessen genom att använda JavaScript-kod för att utlösa åtkomst till den ursprungliga Expo-inloggnings-URL, men sedan döda verifieringspopupen innan du hann läsa den eller godkänna den själv.
Vid det här laget hade Expos tjänst dock redan satt en cookie som heter ru
(Förkortning av returnURL
) för att tala om vart den ska ringa tillbaka med din magiska åtkomsttoken i slutet.
Detta innebar att en cyberbrottsling kunde lura Expos kod att "minna" en returnURL
såsom https://roguesite.example
, utan att du någonsin ser dialogrutan för att varna dig för att en attack var på gång, än mindre att du godkände den av misstag.
Sedan använde forskarna en andra bit JavaScript-kod för att simulera Expos omdirigering till Facebooks verifieringsprocess, vilket automatiskt skulle lyckas om (som många andra) du redan var inloggad på Facebook själv.
Facebooks verifiering skulle i sin tur omdirigera Expo-inloggningsprocessen tillbaka till Expos egen JavaScript-kod...
…som med förtroende men felaktigt skulle ta tag i de aldrig-faktiskt verifierade returnURL
för dess återuppringning från den magin ru
cookie som den satte i början, utan ditt godkännande eller vetskap.
Fail open eller fail closed?
Som du kan se av beskrivningen ovan orsakades sårbarheten av att Expos kod misslyckades på ett felaktigt sätt.
Autentiseringskod bör i allmänhet misslyckas stängd, på jargongen, vilket betyder att processen inte ska lyckas om inte någon form av aktivt godkännande har signalerats.
Vi gissar att Expo inte hade för avsikt att systemet skulle göra det misslyckas öppna, med tanke på att SALTs rapport visar att dess popup-godkännandedialog såg ut så här:
Appen på https://roguesite.example ber dig logga in på ditt Facebook-konto. Litar du fullt ut på https://roguesite.example och går med på att låta det: [Nej] [Ja]
Standardsvaret, som du kan förvänta dig, var inställt på [No]
, men detta skulle bara leda till att systemet inte stängdes om du religiöst använde Expos egen kod på klientsidan för att kontrollera verifieringsprocessen.
Genom att tillhandahålla sitt eget JavaScript för att köra sekvensen av verifieringsförfrågningar kunde forskarna behandla godkännandedialogen som om den hade sagt:
Om du inte uttryckligen säger åt oss att blockera https://roguesite.example från att logga in via ditt Facebook-konto, låter vi det göra det: [Tillåt] [Blockera]
Lösningen, bland andra förändringar, var att Expos första inloggningskod skulle ställa in den magin ru
kaka först efter att du uttryckligen hade godkänt den så kallade returnURL
, så att Expos senare JavaScript-inloggningskod skulle misslyckas stängdes om verifieringspopupen hoppades över, istället för att blint lita på en URL som du aldrig hade sett eller godkänt.
På många sätt liknar denna bugg Belkin Wemo Smart Plug bugg som vi skrev för ungefär två veckor sedan, även om grundorsaken i Belkins fall var ett buffertspill, inte en oseriös webbåteruppringning.
Belkins kod tilldelade en 68-byte minnesbuffert i sin kod på serversidan, men förlitade sig på att checka in sin kod på klientsidan att du inte försökte skicka mer än 68 byte, vilket lämnade servern utlämnad till angripare som bestämde att prata med servern med sin egen kod på klientsidan som kringgick verifieringsprocessen.
Vad göra?
- När du rapporterar och skriver upp buggar, överväg att följa SALT exempel. Avslöja ansvarsfullt, ge leverantören en rimlig tid att åtgärda sårbarheten, plus en rimlig tid för att ge råd till sina egna användare, innan de publicerar detaljer som skulle tillåta någon annan att skapa en egen exploatering.
- När du tar emot felrapporter, överväga att följa Expo's exempel. Svara snabbt, håll kontakt med reportern av buggen, korrigera sårbarheten så snart du kan, tillhandahåll en användbar utredningsrapport för dina användare och håll den objektiv. (Motstå ditt marknadsföringsteams förslag för att berömma dig själv för att du "tar säkerhet på allvar" eller för att avfärda problemet som oviktigt. Det är upp till dina användare att bestämma, baserat på snabbheten och relevansen av ditt svar, och deras egen bedömning av risken.)
- Se till att din autentiseringskod inte stängs. Se till att du inte har verifierings- eller godkännandesteg som kan neutraliseras genom att bara ignorera eller avbryta dem.
- Anta aldrig att din egen kod på klientsidan kommer att ha kontroll över verifieringsprocessen. Anta att angripare kommer att omvända ditt protokoll och skapa sin egen klientkod för att kringgå så många kontroller som de kan.
- Logga ut från webbkonton när du inte aktivt använder dem. Många loggar in på konton som Google, Amazon, Facebook, Apple och andra och förblir sedan inloggade på obestämd tid, eftersom det är bekvämt. Att logga ut förhindrar att många åtgärder (inklusive autentiseringar, inlägg, gilla-markeringar, delningar och mycket mer) händer när du inte förväntar dig dem – du kommer att se en inloggningsprompt istället.
Glöm inte att genom att logga ut från webbtjänster när du kan, och genom att rensa alla dina webbläsarcookies och lagrade webbdata ofta, minskar du också mängden spårningsinformation som webbplatser kan samla in om dig när du surfar.
När allt kommer omkring, om du inte är inloggad, och du inte har några spårningscookies över sedan tidigare, vet inte sajter längre exakt vem du är, eller vad du gjorde senast du besökte.
- SEO-drivet innehåll och PR-distribution. Bli förstärkt idag.
- PlatoAiStream. Web3 Data Intelligence. Kunskap förstärkt. Tillgång här.
- Minting the Future med Adryenn Ashley. Tillgång här.
- Köp och sälj aktier i PRE-IPO-företag med PREIPO®. Tillgång här.
- Källa: https://nakedsecurity.sophos.com/2023/05/30/serious-security-verification-is-vital-examining-an-oauth-login-bug/
- : har
- :är
- :inte
- :var
- $UPP
- 1
- 15%
- 2FA
- a
- Able
- Om oss
- ovan
- Absolut
- tillgång
- Konto
- konton
- förvärvar
- Agera
- åtgärder
- aktiv
- aktivt
- handlingar
- tillsats
- Lägger
- rådgivning
- råda
- Efter
- sedan
- Alla
- allokeras
- tillåter
- tillåter
- ensam
- redan
- också
- alltid
- amason
- bland
- mängd
- an
- och
- Annan
- svara
- vilken som helst
- någon
- något
- app
- Apple
- godkännande
- godkänna
- godkänd
- appar
- ÄR
- runt
- Artikeln
- AS
- bedömning
- At
- attackera
- autentisera
- authenticated
- Autentisering
- Författaren
- auktoriserad
- tillstånd
- bil
- automatiskt
- undvika
- tillbaka
- bakgrund
- bakgrund-bild
- baserat
- BE
- därför att
- varit
- innan
- mellan
- Stor
- blint
- Blockera
- Blogg
- gränsen
- Botten
- mäklare
- webbläsare
- webbläsarkakor
- buffert
- buffertöverskridning
- Bug
- fel
- men
- by
- Ring
- kallas
- KAN
- Vid
- brottning
- Orsak
- orsakas
- Centrum
- chans
- Förändringar
- kontroll
- Kontroller
- patentkrav
- Rensa
- klient
- stängt
- cloud
- koda
- Kodning
- samla
- färg
- kommande
- företag
- Anslutning
- Tänk
- kontakta
- kontroll
- Bekväm
- kaka
- Cookiepolicy
- kunde
- täcka
- skapa
- referenser
- kryptografisk
- Kunder
- IT-KRIMINELL
- datum
- beslutar
- beslutade
- Standard
- levereras
- beskrivning
- önskas
- detalj
- detaljer
- dialogruta
- DID
- Smälta
- direkt
- Avslöja
- avslöjande
- Avfärda
- Visa
- do
- gör
- gör
- donation
- inte
- dubbade
- redigering
- annars
- möjliggöra
- änden
- Även
- NÅGONSIN
- exakt
- Granskning
- exempel
- utbyta
- förvänta
- erfarenhet
- förklarade
- Exploit
- Utställning
- MISSLYCKAS
- inte
- misslyckas
- fascinerande
- få
- slutlig
- Fast
- fixerad
- efter
- följer
- För
- hittade
- ofta
- från
- fullständigt
- allmänhet
- skaffa sig
- Ge
- ges
- Ge
- Go
- Går
- god
- ta
- kraftigt
- hade
- sidan
- Handtag
- Arbetsmiljö
- hänt
- Happening
- Har
- höjd
- hjälp
- här.
- ÖPPETTIDER
- hovring
- Hur ser din drömresa ut
- How To
- Men
- HTTPS
- Identitet
- if
- genomföras
- in
- Inklusive
- indirekt
- informationen
- inledande
- istället
- avser
- in
- undersökande
- fråga
- IT
- DESS
- sig
- jargong
- JavaScript
- bara
- Ha kvar
- Nyckel
- sticka
- Vet
- kunskap
- känd
- Efternamn
- senare
- lämnar
- vänster
- tycka om
- Lyssna
- ll
- inloggad
- skogsavverkning
- logga in
- längre
- såg
- magi
- göra
- många
- många människor
- Marginal
- Marknadsföring
- max-bredd
- betyder
- menas
- Media
- Minne
- kanske
- misstag
- månader
- mer
- mycket
- Som heter
- Behöver
- behövs
- aldrig
- Nya
- nyheter
- Nej
- normala
- antal
- oauth
- mål
- of
- sänkt
- erbjudanden
- erbjuds
- on
- ONE
- nätet
- endast
- öppet
- Alternativet
- or
- Övriga
- Övrigt
- ut
- över
- egen
- packad
- parametrar
- passerar
- Förbi
- Lösenord
- Lappa
- Plåster
- paul
- Personer
- telefon
- plato
- Platon Data Intelligence
- PlatonData
- plus
- Punkt
- poäng
- Populära
- placera
- möjlig
- inlägg
- presentera
- förhindrar
- privat
- process
- processer
- Profil
- Programmering
- protokoll
- Bevisa
- ge
- publicitet
- publicerade
- publicering
- syfte
- sätta
- snabbt
- snarare
- Läsa
- verkligen
- rimlig
- erhåller
- mottagande
- dirigera om
- minska
- förlita
- svar
- rapport
- reportern
- Rapportering
- Rapport
- förfrågningar
- kräver
- forskare
- respons
- ansvarig
- återgår
- höger
- Risk
- rot
- Körning
- Nämnda
- salt
- nöjd
- säga
- säger
- scener
- Andra
- säkert
- säkerhet
- säkerhetstoken
- se
- se
- sett
- ser
- sända
- skickas
- Sekvens
- allvarlig
- service
- Tjänster
- in
- inställning
- aktier
- Kort
- skall
- Visar
- signera
- liknande
- förenklade
- helt enkelt
- webbplats
- Områden
- smarta
- So
- Social hållbarhet
- sociala medier
- Sociala medier inlägg
- fast
- lösning
- några
- något
- Alldeles strax
- tala
- speciell
- specificerade
- starta
- bo
- Steg
- lagras
- lämnats
- lyckas
- sådana
- leverera
- SVG
- system
- Diskussion
- tala
- berättar
- än
- den där
- Smakämnen
- deras
- Dem
- sedan
- därför
- Dessa
- de
- detta
- de
- fastän?
- tre
- tid
- till
- token
- toolkit
- topp
- Spårning
- övergång
- transparent
- behandla
- försökte
- utlösa
- triggas
- Litar
- lita
- prova
- SVÄNG
- två
- Ytterst
- under
- på
- URL
- us
- Begagnade
- Användare
- användare
- med hjälp av
- BEKRÄFTA
- godkännande
- leverantör
- Verifiering
- verifiera
- via
- Besök
- besökta
- avgörande
- sårbarhet
- vill
- var
- Sätt..
- sätt
- we
- webb
- webbservice
- Webbplats
- veckor
- begav sig
- były
- Vad
- när
- närhelst
- som
- VEM
- kommer
- med
- inom
- utan
- skulle
- skrivning
- Fel
- X
- ja
- ännu
- dig
- Din
- själv
- zephyrnet