Browserele web sunt instalate pe miliarde de dispozitive din întreaga lume, ceea ce le face ținte principale pentru infractorii cibernetici. Deoarece principalele browsere web au baze masive de utilizatori, o singură vulnerabilitate poate avea consecințe de mare amploare. Actualizarea browserelor este esențială pentru a rămâne protejat împotriva amenințărilor în continuă evoluție.
Pentru a ilustra gravitatea vulnerabilităților din browserele web, colegii noștri au efectuat o analiză extinsă a CVE-2024-6778, o vulnerabilitate din browserele bazate pe Chromium, care afectează în special Chrome DevTools. Acest blog oferă o examinare detaliată a aspectelor tehnice ale vulnerabilității, a impactului potențial și a strategiilor de atenuare.
Contextul CVE-2024-6778
CVE-2024-6778 este o vulnerabilitate de tip race condition descoperită în Chrome DevTools. Aceasta permite atacatorilor să injecteze HTML sau JavaScript malițios în pagini de browser privilegiate prin intermediul unor extensii de browser malițioase. Conform NVD (National Vulnerability Database), această vulnerabilitate a fost clasificată cu severitate ridicată, cu un scor CVSS de 8,8.
Gradul ridicat de severitate al acestei vulnerabilități se datorează potențialului său de a permite executarea codului de la distanță, ceea ce poate duce la compromiterea sistemelor, deteriorarea confidențialității și reducerea disponibilității.
Prezentare generală a securității Chromium
Pentru a înțelege mai bine implicațiile CVE-2024-6778, este important să cunoaștem aspectele cheie ale modelului de securitate al Chromium. Chromium este fundația open-source pentru browsere precum Google Chrome, Microsoft Edge, Opera și Brave. Acesta utilizează un model multiproces în care fiecare filă, denumită și randor, și diverse componente ale browserului rulează în procese izolate pentru a spori stabilitatea și securitatea prin limitarea domeniului de aplicare al potențialelor compromisuri.
Un element fundamental al securității Chromium este mecanismul său de sandboxing, care restricționează accesul direct al proceselor de randare la resursele sistemului. În schimb, toate interacțiunile sunt gestionate prin intermediul canalelor IPC (Inter-Process Communication) pentru a se asigura că sunt efectuate numai operațiunile autorizate.
Nu toate componentele din cadrul Chromium sunt supuse unui sandboxing complet. Paginile WebUI, cum ar fi chrome://settings și chrome://downloads, sunt redate în cadrul proceselor de redare, dar funcționează cu restricții sandbox parțiale. Acest proces le acordă acces la API-urile browserului care, de obicei, nu sunt accesibile prin web.
De exemplu, pagina chrome://policy joacă un rol esențial în mediile întreprinderilor, deoarece permite administratorilor și utilizatorilor să configureze și să aplice politicile de securitate ale browserului. Aceste politici sunt, de asemenea, gestionate prin intermediul politicii de grup pe sistemele Windows.
Deoarece chrome://policy poate interacționa direct cu sistemul de operare, este o țintă valoroasă pentru atacatori. Datorită vulnerabilității CVE-2024-6778 care exploatează o condiție de cursă în cadrul Chrome DevTools, atacatorii pot injecta cod malițios în aceste pagini, ceea ce prezintă riscuri grave de securitate.
Analiza tehnică a CVE-2024-6778
Descoperire
Această vulnerabilitate a fost descoperită într-o caracteristică de testare introdusă în Chrome Enterprise versiunea 117. Această caracteristică permite testarea politicilor prin intermediul paginii chrome://policy/test. Din cauza documentației oficiale limitate cu privire la această caracteristică, colegii noștri au efectuat o examinare aprofundată a codului sursă Chromium, completată cu informații de la autorul CVE, pentru a înțelege pe deplin implementarea acesteia și pentru a identifica vulnerabilitățile de securitate asociate.
Componente de gestionare a politicilor
Analiza codului sursă de către bursierii OPSWAT a arătat că în cadrul chrome://policy/test, politicile sunt gestionate utilizând PolicyInfo
și comunicate între procesele WebUI și browser prin intermediul PolicyTestBrowserProxy
clasă. Clasa PolicyInfo
este definită după cum urmează:
Prin examinarea suplimentară a clasei responsabile de gestionarea acestor politici, a fost identificată o metodă denumită aplică politici de testare
. Această metodă utilizează un API privat, setLocalTestPolicies
, pentru a aplica dinamic o listă de politici.
Pentru a obține o perspectivă asupra modului în care cererile de politici sunt prelucrate prin intermediul acestui API, cercetătorii analizează HandleSetLocalTestPolicies
în cadrul metodei PolicyUIHandler
clasă:
The HandleSetLocalTestPolicies
recuperează datele politicii din argumentele furnizate și obține un pointer către LocalTestPolicyProvider
prin intermediul conectorului de politică globală al browserului. Apoi, acesta verifică existența acestui furnizor înainte de a instrui profilul utilizatorului curent să îl utilizeze.
Această verificare a fost considerată insuficientă, deoarece asigură doar că furnizor_de_test_local
este non-null înainte de aplicarea politicilor. Crearea și inițializarea furnizor_de_test_local
sunt controlate de CreateIfAllowed
metodă:
În cadrul CreateIfAllowed
valoarea de retur depinde în întregime de rezultatul metodei IsPolicyTestingEnabled
funcție. Această funcție determină dacă o LocalTestPolicyProvider
pe baza unei combinații de preferințe ale utilizatorului și a canalului de lansare al browserului:
Deoarece pref_service
este setat în mod constant la null de fiecare dată când IsPolicyTestingEnabled()
este apelată, prima condiție este ocolită, lăsând decizia de activare să se bazeze exclusiv pe canalul de lansare al browserului.
În compilațiile Chromium fără marcă, canalul de lansare are ca valoare implicită Canal::NECUNOSCUT
. În conformitate cu logica funcției, Canal::NECUNOSCUT
este tratat la fel ca Canal::DEFAULT
, care activează implicit funcția de testare a politicilor. Analiza fluxului de cod a arătat că API privat setLocalTestPolicies
pot fi invocate prin WebUI pentru a aplica politici fără restricții de acces semnificative.
Exploatare
Prin identificarea și valorificarea acestui API privat, un atacator poate aplica în mod arbitrar politici prin WebUI, permițând manipularea unor setări precum BrowserSwitcherEnabled
, Lista BrowserSwitcherUrlList
, AlternativeBrowserPath
, și AlternativeBrowserParameters
pentru a executa comenzi. De exemplu, prin setarea AlternativeBrowserPath
la powershell și AlternativeBrowserParameters
pentru ["calc"]
, pot fi executate comenzi shell arbitrare atunci când este vizitat un anumit URL.
Aplicați o politică arbitrară de utilizator rău intenționat prin API privat
Pentru a demonstra modul în care politicile pot fi aplicate utilizând sistemul privat setLocalTestPolicies
API identificat în analiza anterioară, următorul cod JavaScript este un script care stabilește AllowDinosaurEasterEgg
și o aplică în mod eficient prin intermediul WebUI
prin invocarea setLocalTestPolicies
:
Politica poate fi aplicată cu succes pentru a dezactiva AllowDinosaurEasterEgg
setare.
Pentru un impact mai mare, un atacator poate viza BrowserSwitcher
politică:
Această politică permite browserului să invoce o cale alternativă a browserului dacă URL-ul corespunde anumitor condiții. Aceasta poate fi exploatată prin configurarea acestei căi pentru a indica un executabil de sistem pentru a executa comenzi ale sistemului de operare. Următorul cod JavaScript demonstrează această abordare:
Acest script efectuează următoarele sarcini:
- Activează
BrowserSwitcher
caracteristică pentru example.com - Setează calea alternativă a browserului către powerShell
- Execută
calc
ori de câte ori URL-ul specificat este accesat.
Simulare de extensie Chrome malițioasă
Identificarea API privat care permite aplicarea politicilor introduce un vector de atac semnificativ pentru adversari. Pentru a exploata eficient această vulnerabilitate, un atacator ar trebui să dezvolte o extensie Chrome rău intenționată care utilizează API Chrome DevTools pentru a executa cod JavaScript rău intenționat.
Pentru a demonstra impactul potențial în lumea reală, colegii noștri au simulat un scenariu în care o extensie Chrome malițioasă este instalată pe un browser vulnerabil și utilizată pentru a executa atacul.API-urile chrome.devtools din Chrome Extensions permit dezvoltatorilor să extindă și să interacționeze cu interfața DevTools a Chrome.
Cu toate acestea, executarea API DevTools prin intermediul unei extensii prezintă anumite provocări care trebuie ocolite. În primul rând, API DevTools este operațional numai atunci când DevTools este deschis și inspectează activ un site web. În al doilea rând, API DevTools nu permite executarea de cod pe interfața utilizator web, WebUI. Această limitare contribuie la menținerea securității și integrității WebUI în timpul proceselor de dezvoltare și inspecție
Semne care indică execuția Javascript prin API reîncărcare
O analiză suplimentară a arătat că funcția chrome.devtools.inspectedWindow.reload nu dispune de verificarea necesară pentru a confirma dacă o extensie are permisiunea de a executa scripturi pe pagina inspectată. Singurul său nivel de apărare este serverul de extensii devtools, care blochează accesul odată ce URL-ul paginii inspectate se modifică.
Paginile about:blank moștenesc permisiunile și originea paginii care le-a deschis. Aceasta înseamnă că posibilitatea de a executa cod pe pagina about:blank atunci când este redirecționată de la semnalele WebUI este o vulnerabilitate potențială.
Executarea codului pe webUI prin API reîncărcare
Condiția de cursă în chrome.devtools.inspectedWindow.reload()
permite executarea de cod pe paginile WebUI ale Chrome (de exemplu, chrome://policy), care sunt de obicei protejate. Exploatarea profită de capacitatea API de reîncărcare de a injecta JavaScript în timpul tranzițiilor de pagină. Iată cum funcționează:
- Ținta webUI: Deschideți o pagină WebUI (de exemplu, chrome://policy) într-un tab și atașați DevTools.
- Injectați un script: Utilizați API reload() cu un
injectatScript
pentru a rula JavaScript arbitrar în timpul reîncărcării. - Exploit Race Condition: Condiția de cursă apare atunci când reîncărcarea se declanșează înainte ca mecanismele de securitate ale WebUI să se inițializeze complet, permițând scriptului injectat să se execute.
În contextul navigării de la pagina about:blank la chrome://policy:
Deoarece numai URL-ul este verificat în loc de originea paginii, după navigare există o scurtă perioadă în care originea reflectă noua pagină, în timp ce URL-ul rămâne neschimbat.
Dacă chrome.devtools.inspectedWindow.reload
este invocat în timpul acestei ferestre, acesta poate executa JavaScript în mod neintenționat pe pagina de destinație.
Îmbunătățirea fiabilității pentru condițiile de cursă
Exploatarea condiției de cursă este inerent nesigură din cauza dependenței sale de sincronizare. În plus, reîncărcările rapide sau scripturile malformate pot provoca blocaje ale paginii. O nouă abordare pentru îmbunătățirea fiabilității implică inducerea intenționată a unei prăbușiri a paginii, deoarece comenzile emise prin DevTools sunt de obicei anulate în timpul unei prăbușiri, dar Page.reload
mapat la chrome.devtools.inspectedWindow.reload()
este inclusă pe lista albă și executată după reîncărcarea paginii.
Următorul este un model de flux de lucru pentru a bloca o pagină prin introducerea de comenzi ulterioare:
Declarația Debugger din scriptul de conținut poate declanșa un crash
Utilizarea de două ori la rând a depanatorului perturbă procesul de navigare într-un script de conținut. Aceasta poate duce la o blocare prin plasarea stare_de_angajare_de_navigare
într-o stare neanticipată. Această problemă apare atunci când RenderFrameImpl::SynchronouslyCommitAboutBlankForBug778318
este executat, modificarea _navigation_commit_state
la o valoare neașteptată.
Prima invocare oprește execuția, lăsând stare_de_angajare_de_navigare
într-o stare inconsistentă, iar al doilea face o pauză în timpul CHECK_EQ
eșuând validarea stării și provocând un accident.
Remediere
Neglijarea actualizării periodice a versiunii browserului vă poate expune dispozitivul la amenințări grave de securitate, în special la cele legate de CVE (Vulnerabilități și expuneri comune). Pentru a contribui la reducerea acestui risc, MetaDefender Endpoint™ oferă protecție solidă prin detectarea versiunii browserului și verificarea vulnerabilităților, inclusiv a CVE-urilor cunoscute, cum ar fi CVE-2024-6778.
MetaDefender Endpoint se asigură că aplicația dvs. este actualizată și semnalează orice versiune învechită sau infectată. De asemenea, acesta listează aplicațiile instalate cu vulnerabilități cunoscute, clasificate în funcție de severitatea CVE, și recomandă remedieri pentru a reduce în mod eficient potențialele amenințări. Pentru a vedea o demonstrație live a modului în care MetaDefender Endpoint vă poate ajuta să reduceți aceste riscuri, luați legătura astăzi cu unul dintre experții noștri.