Cercetătorii de la compania de securitate pentru codificare web SALT tocmai au publicat o descriere fascinantă a modului în care au găsit un bug de autentificare numit CVE-2023-28131 într-un set de instrumente popular pentru construirea aplicațiilor online cunoscut sub numele de Expo.
Vestea bună este că Expo a răspuns foarte repede la raportul de eroare al SALT, venind cu o remediere în doar câteva ore de la dezvăluirea responsabilă de către SALT.
Din fericire, remedierea nu s-a bazat pe descărcarea de nimic de către clienți, deoarece patch-ul a fost implementat în cadrul serviciului cloud al Expo și nu a necesitat corecții pentru nicio aplicație preinstalată sau cod la nivelul clientului.
Expo-uri consultativ nu numai că a explicat ce s-a întâmplat și cum a remediat compania, dar a oferit și sfaturi de programare clienților săi despre cum să evite acest tip de posibilă vulnerabilitate cu alte servicii online.
SALT a așteptat apoi trei luni înainte de a-și publica raportul, în loc să-l grăbească în scopuri publicitare cât de curând a putut, oferind astfel utilizatorilor Expo șansa de a digera și de a acționa după răspunsul Expo.
Păstrându-l simplu
Procesul de autentificare cu erori este explicat în detaliu în Raportul SALT, dar vom prezenta aici o descriere foarte simplificată a ceea ce a mers prost în serviciul OAUTH al Expo.
JURĂMÂNT, scurt pentru Deschideți Cadrul de Autorizare, este un proces care vă permite să accesați date private într-un serviciu online (cum ar fi editarea profilului dvs. online, adăugarea unui nou articol de blog sau aprobarea unui serviciu web pentru a face postări pe rețelele sociale pentru dvs.), fără a configura vreodată o parolă cu , sau conectarea directă la acel serviciu în sine.
Când vezi servicii web care îți oferă a Conectați-vă cu Google sau Facebook Opțiunea, de exemplu, folosesc aproape întotdeauna OAUTH în fundal, astfel încât să nu fie nevoie să creați un nou nume de utilizator și o nouă parolă cu încă un alt site web sau să oferiți numărul dvs. de telefon unui alt serviciu online.
Strict vorbind, vă autentificați indirect, punând întotdeauna acreditările Google sau Facebook pe unul dintre acele site-uri.
Unii utilizatori nu le place acest lucru, pentru că nu doresc să se autentifice la Google sau Facebook doar pentru a-și dovedi identitatea pe alte site-uri care nu au legătură. Alții le place pentru că presupun că site-uri precum Facebook și Google au mai multă experiență în gestionarea procesului de conectare, stocarea hash-urilor parolelor în siguranță și realizarea 2FA decât un site web de tip boutique care a încercat să-și împletească propriile procese de securitate criptografică.
Autentificare externalizată
Foarte simplificat, o conectare în stil OAUTH, prin intermediul contului dvs. de Facebook la un site numit example.com
, merge cam asa:
- Site-ul
example.com
spune aplicației sau browserului dvs., „Bună, X, du-te și obține un simbol de acces magic pentru acest site de la Facebook.” - Vizitați o adresă URL specială de Facebook, conectându-vă dacă nu ați făcut-o deja, și spuneți: „Dă-mi un simbol de acces magic pentru
example.com
. " - Dacă Facebook este mulțumit că sunteți cine pretindeți, acesta răspunde: „Bună, X, iată jetonul tău de acces magic.”
- Îi înmânați jetonul de acces
example.com
, care poate contacta apoi Facebook însuși pentru a valida jetonul.
Rețineți că numai Facebook vă vede parola Facebook și codul 2FA, dacă este necesar, astfel încât serviciul Facebook acționează ca un broker de autentificare între dvs. și example.com
.
În culise, există o validare finală, ca aceasta:
- Site-ul
example.com
spune pe Facebook, „Ați emis acest token și validează utilizatorul X?” - Dacă Facebook este de acord, spune
example.com
, „Da, considerăm că acest utilizator este autentificat.”
Secvență subvertibilă
Bug-ul pe care cercetătorii SALT l-au găsit în codul Expo poate fi declanșat prin subminarea în mod rău intenționat a gestionării de către Expo a ceea ce ați putea numi procesul de „intermediere de autentificare”.
Punctele cheie sunt următoarele:
- Expo în sine adaugă un înveliș în jurul procesului de verificare, astfel încât să se ocupe de autentificare și validare pentru dvs., trecând în cele din urmă un simbol de acces magic pentru site-ul web dorit (
example.com
în schimbul de mai sus) înapoi la aplicația sau site-ul web de la care vă conectați. - Parametrii utilizați în manipularea verificării sunt împachetate într-o adresă URL mare care este trimisă serviciului Expo.
- Unul dintre acești parametri este stocat temporar într-un cookie web care specifică adresa URL la care va fi trimis jetonul de securitate magic final pentru a permite accesul.
- Înainte ca jetonul de securitate să fie livrat, o fereastră pop-up vă solicită să verificați adresa URL care urmează să fie autorizată, astfel încât să puteți observa pe oricine încearcă să înlocuiască o adresă URL falsă în procesul de conectare.
- Dacă aprobi fereastra pop-up, Expo vă redirecționează către procesul de verificare Facebook.
- Dacă Facebook aprobă verificarea, returnează un simbol de acces magic la serviciul Expo, iar Expo îl transmite la adresa URL pe care tocmai ați aprobat-o în fereastra pop-up, numită
returnURL
. - Aplicația sau site-ul web ascultă la specificat
returnURL
primește apelul înapoi de la Expo, dobândește jetonul de acces și, prin urmare, este autentificat ca dvs.
Din păcate, cercetătorii SALT au descoperit că ar putea submina procesul de conectare folosind codul JavaScript pentru a declanșa accesul la adresa URL inițială de conectare la Expo, dar apoi elimină fereastra de verificare înainte de a avea timp să-l citești sau să-l aprobi singur.
În acest moment, însă, serviciul Expo a setat deja un cookie numit ru
(scurt pentru returnURL
) pentru a-i spune unde să apeleze înapoi cu jetonul de acces magic la sfârșit.
Acest lucru însemna că un criminal cibernetic ar putea păcăli codul Expo pentru a-și „aminti” a returnURL
precum https://roguesite.example
, fără să vedeți vreodată dialogul care să vă avertizeze că a fost în curs de desfășurare un atac, darămite să îl aprobi din greșeală.
Apoi, cercetătorii au folosit o a doua bucată de cod JavaScript pentru a simula redirecționarea Expo către procesul de verificare al Facebook, care ar reuși automat dacă (ca mulți oameni) ați fi deja conectat la Facebook însuși.
Verificarea Facebooks, la rândul său, ar redirecționa procesul de conectare la Expo înapoi în propriul cod JavaScript al Expo...
…care ar prinde cu încredere, dar eronat, ceea ce nu a fost niciodată verificat returnURL
pentru apelul său din acea magie ru
cookie pe care l-a setat la început, fără aprobarea sau știrea dvs.
Eșuat deschis sau eșuat închis?
După cum puteți vedea din descrierea de mai sus, vulnerabilitatea a fost cauzată de o defecțiune inadecvată a codului Expo.
Codul de autentificare ar trebui în general fail închis, în jargon, ceea ce înseamnă că procesul nu ar trebui să reușească decât dacă a fost semnalată un fel de aprobare activă.
Bănuim că Expo nu a intenționat sistemul nu se deschide, având în vedere că raportul SALT arată că dialogul său pop-up de aprobare arăta astfel:
Aplicația de la https://roguesite.example vă solicită să vă conectați la contul dvs. de Facebook. Aveți deplină încredere în https://roguesite.example și sunteți de acord să îl lăsați: [Nu] [Da]
Răspunsul implicit, așa cum v-ați aștepta, a fost setat la [No]
, dar acest lucru ar face ca sistemul să nu se închidă numai dacă ați folosit religios codul propriu al clientului Expo pentru a controla procesul de verificare.
Furnizând propriul lor JavaScript pentru a rula secvența solicitărilor de verificare, cercetătorii au putut trata dialogul de aprobare ca și cum ar fi spus:
Dacă nu ne spuneți în mod explicit să blocăm https://roguesite.example de la conectarea prin contul dvs. de Facebook, îl vom lăsa să facă acest lucru: [Permite] [Blocați]
Soluția, printre alte modificări, a fost ca codul inițial de conectare al Expo să stabilească această magie ru
fursec numai după ce ai aprobat în mod explicit așa-zisul returnURL
, astfel încât codul de conectare JavaScript de la Expo să eșueze închiderea dacă fereastra pop-up de verificare a fost omisă, în loc să aveți încredere orbește într-o adresă URL pe care nu ați văzut-o sau ați aprobat-o niciodată.
În multe privințe, acest bug este similar cu Priză inteligentă Belkin Wemo eroare pe care am scris-o acum vreo două săptămâni, chiar dacă cauza rădăcină în cazul lui Belkin a fost o depășire a memoriei tampon, nu un apel invers web necinstit.
Codul Belkin a alocat un buffer de memorie de 68 de octeți în codul său de pe partea de server, dar s-a bazat pe verificarea codului său de pe partea clientului că nu ați încercat să trimiteți mai mult de 68 de octeți, lăsând astfel serverul la mila atacatorilor care au decis pentru a vorbi cu serverul folosind propriul cod de la parte client care a ocolit procesul de verificare.
Ce să fac?
- Când raportați și scrieți erori, luați în considerare următoarele SALT exemplu. Dezvăluie în mod responsabil, oferind vânzătorului un timp rezonabil pentru a remedia vulnerabilitatea, plus un timp rezonabil pentru a-și sfătui proprii utilizatori, înainte de a publica detalii care ar permite oricui altcineva să creeze o exploatare proprie.
- Când primiți rapoarte de eroare, luați în considerare să urmați Expo exemplu. Răspundeți rapid, păstrați legătura cu raportorul erorii, corectați vulnerabilitatea cât mai curând posibil, oferiți un raport de investigație util pentru utilizatorii dvs. și mențineți-l obiectiv. (Rezistați-vă sugestiilor echipei dvs. de marketing pentru a vă lăuda pentru că „luați în serios securitatea” sau pentru a respinge problema ca neimportantă. Asta trebuie să decidă utilizatorii dvs., în funcție de promptitudinea și pertinența răspunsului dvs. și de propria lor evaluare a riscului.)
- Asigurați-vă că codul dvs. de autentificare nu se închide. Asigurați-vă că nu aveți pași de verificare sau aprobare care pot fi neutralizați pur și simplu ignorându-i sau anulându-i.
- Nu presupuneți niciodată că propriul cod de client va deține controlul asupra procesului de verificare. Presupuneți că atacatorii vă vor modifica protocolul și vor crea propriul cod client pentru a evita cât mai multe verificări.
- Deconectați-vă de la conturile web când nu le utilizați în mod activ. Mulți oameni se conectează la conturi precum Google, Amazon, Facebook, Apple și altele și apoi rămân conectați la nesfârșit, pentru că este convenabil. Deconectarea previne apariția multor acțiuni (inclusiv autentificări, postări, aprecieri, distribuiri și multe altele) atunci când nu vă așteptați la acestea - veți vedea în schimb o solicitare de conectare.
Nu uitați că, deconectați-vă de la serviciile web ori de câte ori puteți și ștergând frecvent toate modulele cookie de browser și datele web stocate, reduceți, de asemenea, cantitatea de informații de urmărire pe care site-urile le pot colecta despre dvs. în timp ce navigați.
La urma urmei, dacă nu sunteți autentificat și nu aveți cookie-uri de urmărire rămase de înainte, site-urile nu mai știu exact cine sunteți sau ce ați făcut ultima dată când ați vizitat.
- Distribuție de conținut bazat pe SEO și PR. Amplifică-te astăzi.
- PlatoAiStream. Web3 Data Intelligence. Cunoștințe amplificate. Accesați Aici.
- Mintând viitorul cu Adryenn Ashley. Accesați Aici.
- Cumpărați și vindeți acțiuni în companii PRE-IPO cu PREIPO®. Accesați Aici.
- Sursa: https://nakedsecurity.sophos.com/2023/05/30/serious-security-verification-is-vital-examining-an-oauth-login-bug/
- :are
- :este
- :nu
- :Unde
- $UP
- 1
- 15%
- 2FA
- a
- Capabil
- Despre Noi
- mai sus
- Absolut
- acces
- Cont
- Conturi
- achiziţionează
- act
- acțiuni
- activ
- activ
- Acte
- adăugare
- Adaugă
- sfat
- sfătui
- După
- în urmă
- TOATE
- alocate
- permite
- permite
- singur
- deja
- de asemenea
- mereu
- Amazon
- printre
- sumă
- an
- și
- O alta
- răspunde
- Orice
- oricine
- nimic
- aplicaţia
- Apple
- aprobare
- aproba
- aprobat
- Apps
- SUNT
- în jurul
- articol
- AS
- evaluare
- At
- ataca
- autentifica
- autentificata
- Autentificare
- autor
- autorizat
- autorizare
- Auto
- în mod automat
- evita
- înapoi
- fundal
- imagine de fundal
- bazat
- BE
- deoarece
- fost
- înainte
- între
- Mare
- orbeşte
- Bloca
- Blog
- frontieră
- De jos
- agent
- browser-ul
- cookie-uri de browser
- tampon
- tampon de depășire
- Bug
- gandaci
- dar
- by
- apel
- denumit
- CAN
- caz
- Captură
- Provoca
- cauzată
- Centru
- șansă
- Modificări
- control
- Verificări
- pretinde
- Cliring
- client
- închis
- Cloud
- cod
- Codificare
- colecta
- culoare
- venire
- companie
- Conectarea
- Lua în considerare
- contactați-ne
- Control
- Convenabil
- fursec
- fursecuri
- ar putea
- acoperi
- crea
- scrisori de acreditare
- criptografic
- clienţii care
- CYBERCRIMINAL
- de date
- decide
- hotărât
- Mod implicit
- livrate
- descriere
- dorit
- detaliu
- detalii
- Dialog
- FĂCUT
- rezumat
- direct
- dezvălui
- dezvăluire
- destitui
- Afişa
- do
- face
- face
- don
- Dont
- numit
- editare
- altfel
- permite
- capăt
- Chiar
- EVER
- exact
- examinator
- exemplu
- schimb
- aștepta
- experienţă
- a explicat
- Exploata
- Expoziţie
- FAIL
- în lipsa
- eșuează
- fascinant
- puțini
- final
- Repara
- fixată
- următor
- urmează
- Pentru
- găsit
- frecvent
- din
- complet
- în general
- obține
- Da
- dat
- Oferirea
- Go
- Merge
- bine
- apuca
- foarte mult
- HAD
- mână
- Mânere
- Manipularea
- sa întâmplat
- lucru
- Avea
- înălțime
- util
- aici
- ORE
- planare
- Cum
- Cum Pentru a
- Totuși
- HTTPS
- Identitate
- if
- implementat
- in
- Inclusiv
- indirect
- informații
- inițială
- in schimb
- intenţionează
- în
- de investigare
- problema
- IT
- ESTE
- în sine
- jargon
- JavaScript
- doar
- A pastra
- Cheie
- tricot
- Cunoaște
- cunoştinţe
- cunoscut
- Nume
- mai tarziu
- lăsând
- stânga
- ca
- Ascultare
- ll
- autentificat
- logare
- Logare
- mai lung
- uitat
- magie
- face
- multe
- mulți oameni
- Margine
- Marketing
- max-width
- sens
- a însemnat
- Mass-media
- Memorie
- ar putea
- greşeală
- luni
- mai mult
- mult
- Numit
- Nevoie
- necesar
- nu
- Nou
- ştiri
- Nu.
- normală.
- număr
- oauth
- obiectiv
- of
- de pe
- oferi
- oferit
- on
- ONE
- on-line
- afară
- deschide
- Opțiune
- or
- Altele
- Altele
- afară
- peste
- propriu
- împachetat
- parametrii
- trece
- Care trece
- Parolă
- Plasture
- Patch-uri
- Paul
- oameni
- telefon
- Plato
- Informații despre date Platon
- PlatoData
- la care se adauga
- Punct
- puncte
- Popular
- poziţie
- posibil
- postări
- prezenta
- previne
- privat
- proces
- procese
- Profil
- Programare
- protocol
- Dovedi
- furniza
- publicitate
- publicat
- Editare
- scopuri
- Punând
- repede
- mai degraba
- Citeste
- într-adevăr
- rezonabil
- primește
- primire
- redirecționa
- reduce
- se bazează
- răspuns
- raportează
- reporter
- Raportarea
- Rapoarte
- cereri de
- necesita
- cercetători
- răspuns
- responsabil
- Returnează
- dreapta
- Risc
- rădăcină
- Alerga
- Said
- sare
- satisfăcut
- Spune
- spune
- scene
- Al doilea
- în siguranță,
- securitate
- token de securitate
- vedea
- vedere
- văzut
- vede
- trimite
- trimis
- Secvenţă
- serios
- serviciu
- Servicii
- set
- instalare
- Acțiuni
- Pantaloni scurți
- să
- Emisiuni
- semna
- asemănător
- simplificată
- pur şi simplu
- teren
- Centre de cercetare
- inteligent
- So
- Social
- social media
- Postări în rețelele sociale
- solid
- soluţie
- unele
- ceva
- Curând
- vorbire
- special
- specificată
- Începe
- şedere
- paşi
- stocate
- prezentat
- reuși
- astfel de
- furnizarea
- SVG
- sistem
- Vorbi
- spune
- spune
- decât
- acea
- lor
- Lor
- apoi
- prin urmare
- Acestea
- ei
- acest
- aceste
- deşi?
- trei
- timp
- la
- semn
- Toolkit
- top
- Urmărire
- tranziţie
- transparent
- trata
- încercat
- declanşa
- a declanșat
- Încredere
- încredere
- încerca
- ÎNTORCĂ
- Două
- în cele din urmă
- în
- pe
- URL-ul
- us
- utilizat
- Utilizator
- utilizatorii
- folosind
- VALIDA
- validare
- vânzător
- Verificare
- verifica
- de
- Vizita
- vizitat
- vital
- vulnerabilitate
- vrea
- a fost
- Cale..
- modalități de
- we
- web
- servicii web
- website
- săptămâni
- a mers
- au fost
- Ce
- cand
- oricând
- care
- OMS
- voi
- cu
- în
- fără
- ar
- scris
- Greșit
- X
- da
- încă
- tu
- Ta
- te
- zephyrnet