AI Hacking - Cum folosesc hackerii inteligența artificială în atacurile cibernetice

Citește acum
Utilizăm inteligența artificială pentru traducerile site-urilor și, deși ne străduim să fim exacți, este posibil ca acestea să nu fie întotdeauna 100% precise. Apreciem înțelegerea dumneavoastră.

Analizarea și remedierea vulnerabilității Git CVE-2024-32002

de OPSWAT
Împărtășește această postare
Minh Pham și Thai Do, studenți la Universitatea de Tehnologie Ho Chi Minh, care au participat la programul de burse OPSWAT
Studenții au participat la programul de burse OPSWAT .

O vulnerabilitate critică în Git care permite atacuri RCE (remote code execution) a fost dezvăluită recent, afectând mai multe versiuni ale Git și Microsoft Visual Studio 2017. Vulnerabilitatea permite atacatorilor să manipuleze depozitele Git utilizând submodule, exploatând o eroare în Git care permite scrierea fișierelor în afara arborelui de lucru al submodulelor și în directorul .git/. Această eroare permite executarea unui cârlig malițios în timp ce o operațiune de clonare a unui depozit este încă în desfășurare [1]. 

Vulnerabilitatea CVE-2024-32002 afectează Microsoft Visual Studio 2017 versiunea 15.9 și versiunile Git anterioare 2.45.1, 2.44.1, 2.43.4, 2.42.2, 2.41.1, 2.40.2 și 2.39.4. Acesta poate fi exploatat în mediile în care este activat suportul pentru legături simbolice pe sistemele de operare care nu țin cont de majuscule. 

Informații privind severitatea și vectorul CVSS (Common Vulnerability Scoring System) 3.x, cu un scor de bază de 9.0 etichetat drept critic, furnizate de GitHub, Inc.

Înțelegerea Git

Git este un sistem distribuit de control al versiunilor, gratuit și open-source, conceput pentru a ajuta dezvoltatorii de software să gestioneze bazele de cod rapid și eficient. Acesta îmbunătățește colaborarea între membrii echipei de dezvoltare prin organizarea și urmărirea modificărilor aduse fișierelor și directoarelor într-un mod standardizat și structurat. 

Git este utilizat pe scară largă în dezvoltarea de software. Platforme precum GitHub, GitLab și Bitbucket sunt construite pe Git pentru a îmbunătăți colaborarea între dezvoltatori datorită caracteristicilor sale puternice: 

  • Înregistrarea modificărilor trasabile ale fișierelor de cod, cunoscute sub numele de commits
  • Revenirea la versiunile anterioare ale codurilor editate, atunci când este necesar. 
  • Combinarea eficientă a modificărilor din diferite ramuri sau contribuitori. 
  • Păstrarea unei evidențe a istoricului persoanelor care au efectuat modificări și a datelor acestora.
O reprezentare vizuală a structurii unui folder .git, afișând directoare precum config, HEAD, hooks, objects și refs.

Git Hooks 

Atunci când un depozit Git este creat sau clonat, utilizând comenzile git init sau git clone, un director .giteste generat la rădăcina arborelui de lucru. Structura de directoare a directorului .git arată inițial astfel: 

Cârligele Git sunt scripturi executabile, situate fie în directorul .git/hooks, fie în directorul .git/modules/module_type/module_name/hooks. Hooks sunt declanșate automat atunci când au loc anumite evenimente într-un depozit Git.  

Atunci când un fișier din directorul hooks nu are un sufix .sample, comenzile din acel fișier vor fi executate înainte sau după o anumită acțiune Git care este inclusă în numele fișierului, cum ar fi pre-commit, post-commit și post-checkout

Submodule Git

Un submodul Git este o înregistrare din cadrul unui depozit Git care face trimitere la un anumit commit dintr-un depozit extern. Atunci când un submodul este adăugat la un depozit, se creează un nou fișier în directorul .gitmodules cu metadatele de corespondență dintre URL-ul submodulului și directorul său local. Atunci când un depozit conține mai multe submodule, fișierul .gitmodules va include o intrare pentru fiecare. [3] 

Diagrama care arată interacțiunea dintre depozite și submodule, ilustrând relația dintre Depozitul A, Submodulul B și Dosarul C
Exemplu de conținut al unui fișier .gitmodules, prezentând configurația pentru un submodul numit "Exemplu"
Următoarea imagine arată cum arată un fișier .gitmodules: 

Legături simbolice (Symlinks)

O legătură simbolică, denumită și legătură simbolică sau legătură soft, este un fișier care indică un alt fișier sau director (denumit "țintă") prin specificarea căii acestuia. Dacă o legătură simbolică este ștearsă, ținta sa rămâne neafectată. [4] 

Un symlink în Git este creat ca un fișier cu metadate pentru a-l face să funcționeze ca o referință sau o scurtătură către un alt fișier. Symlink-urile pot fi utilizate pentru a crea referințe multiple la un fișier fără a reproduce conținutul acestuia.

Diagrama care ilustrează legăturile simbolice și hard la un fișier (Fișierul A), arătând cum aceste legături accesează același conținut de fișier
Git tratează legăturile simbolice ca fișiere specializate care stochează calea către fișierul sau directorul la care fac referire. 
Vizualizarea legăturilor simbolice într-un depozit Git, demonstrând structurile de directoare și fișiere și căile lor de legătură simbolică
Atunci când un depozit sau o ramură care conține o legătură simbolică este clonată sau verificată, legătura simbolică stocată în Git este convertită într-o legătură simbolică pe sistemul de fișiere local. 

Analiza vulnerabilităților de securitate GIT

Analiza patch-urilor

Pentru a obține o înțelegere mai profundă a vulnerabilităților de securitate, specialiștii în securitate efectuează adesea o analiză a patch-urilor. Aceasta este o tehnică care ajută la identificarea funcțiilor vulnerabile și a potențialilor vectori de atac. Bursierii OPSWAT au examinat modificările efectuate în versiunea corectată pentru a aborda vulnerabilitatea CVE-2024-32002 și au constatat că două fișiere au fost actualizate pentru a aborda acest CVE.

Unul dintre fișierele actualizate este fișierul submodule--helper.c, care include codul care gestionează clonarea submodulelor Git. Noul commit din versiunea corectată include următoarele două:  

  1. Adăugarea funcției dir_contains_only_dotgit pentru a se asigura că directorul submodules nu conține niciun fișier sau director .git.
Modificări de cod într-un fișier numit submodule-helper.c în cadrul interfeței Git, care prezintă 83 de adăugiri fără eliminări
  1. Au fost efectuate modificări la funcția clone_submodule() pentru a include o condiție care să verifice dacă directorul submodulului există și este gol. Dacă directorul nu este gol, procesul de clonare va fi întrerupt. 
Fragment de cod detaliat dintr-un commit Git, care evidențiază o funcție care verifică conținutul directoarelor în timpul operațiunilor cu submodule

A doua actualizare din noul commit a fost în fișierul t/t7406-submodule-update.sh, adăugând un script de testare pentru a verifica dacă vulnerabilitatea de securitate a fost rezolvată. 

Modificări de cod extinse într-un fișier de testare T7406-submodule-update.sh, care detaliază configurațiile de testare pentru căile submodulelor și symlinks

De la analiză la exploatare

Analiza fluxului de lucru al symlink-urilor și submodulelor în Git

Pe lângă informațiile culese din analiza patch-urilor și descrierea vulnerabilității CVE-2024-32002, bursierii OPSWAT au lucrat la investigarea fluxului de lucru al symlink-urilor și submodulelor în Git. Ei au analizat secvența de evenimente care are loc atunci când un utilizator clonează un depozit:

  1. Git începe prin a descărca fișiere și directoare din depozitul primar. 
  2. Acesta utilizează definițiile specificate în fișierele symlink pentru a recrea symlink-urile corespunzătoare în sistemul de fișiere local.  
  3. Dacă legătura simbolică indică un fișier existent, legătura simbolică va fi funcțională; în caz contrar, legătura simbolică rămâne inoperantă până când ținta este restaurată.  
  4. Dacă depozitul este clonat cu opțiunea --recursive, Git clonează submodulele (depozite externe) și le plasează în directoarele indicate în fișierul .gitmodules.  
  5. Dacă un link simbolic face parte din calea submodulului (de exemplu, util/module/test, unde util este un link simbolic care indică un alt director, cum ar fi symlink_folder), Git va stoca conținutul submodulului în directorul real la care face referire linkul simbolic (de exemplu, symlink_folder/module/test), permițând în același timp accesul prin calea originală a linkului simbolic. 
O diagramă de flux vizuală care prezintă pașii de clonare a unui depozit, descărcarea fișierelor și directoarelor, recrearea legăturilor simbolice, clonarea submodulelor și mutarea în calea corectă

Înțelegerea vulnerabilității de securitate Git CVE-2024-32002 

Crearea de depozite malițioase

Bursierii OPSWAT au examinat în continuare crearea de depozite malițioase pe baza actualizărilor efectuate pentru fișierult/t7406-submodule-update.sh și au defalcat acest proces în următoarele etape:

  1. Crearea unui depozit care conține un cârlig post-checkout
Un fragment de cod terminal care prezintă comenzile pentru configurarea unui cârlig post-checkout în Git, inclusiv crearea de directoare și adăugarea de scripturi
  1. Crearea unui alt depozit care include un submodul, localizat la calea A/modules/x. Noul submodul face trimitere la depozitul creat anterior.
Un fragment de cod terminal care demonstrează procesul de adăugare a unui submodul la un depozit utilizând comenzile Git
  1. Crearea unei legături simbolice numită a, care indică folderul .git din indexul Git. 
Un exemplu de script terminal care evidențiază comenzile pentru crearea și trimiterea unui fișier .git ca utilitar într-un depozit
O diagramă de flux care detaliază un scenariu de atac în care un depozit de cârlig rău intenționat este adăugat ca un submodul la un depozit principal, ceea ce duce la executarea unui script
O diagramă care prezintă modul în care un atacator poate exploata CVE prin clonarea unui depozit 

Înțelegerea defectului de securitate

Atunci când un utilizator clonează un depozit malițios, creat în etapa anterioară, utilizând opțiunea --recursive, scriptul malițios din cârligul post-checkout va fi declanșat, permițând atacatorului să compromită dispozitivul utilizatorului. 

Această execuție de cod de la distanță are loc deoarece depozitul principal detectează o legătură simbolică numită a care indică directorul .git atunci când este clonat. Cu modul recursiv activat, submodulele sunt, de asemenea, trase în depozitul clonat. Acest depozit conține un folder hooks, care conține scriptul hook post-checkout, iar directorul său local este în A/modules/x.  

Deoarece a indică directorul.git, iar sistemul de fișiere nu distinge între majuscule și minuscule, A este interpretat ca fiind echivalent cu a. Git este indus în eroare în scrierea scriptului cârlig post-checkout în directorul .git/modules/query/fast/hooks/. Dacă se găsește un script de cârlig post-checkout în directorul . git/modules/{module_type}/{module_name}/hooks, acesta va fi declanșat atunci când depozitul principal este clonat cu opțiunea --recursive. Ca urmare, atacatorii pot compromite cu succes dispozitivul utilizatorului prin executarea de cod de la distanță.

O diagramă care ilustrează interacțiunea victimei cu un depozit rău intenționat, inclusiv clonarea, extragerea de submodule și executarea neintenționată de scripturi
O diagramă care prezintă fluxul atacului

Simularea exploatării vulnerabilității Git

Pe baza constatărilor anterioare, OPSWAT Fellows a creat un depozit principal și un cârlig pentru a simula crearea unui depozit rău intenționat:

  1. Inițial, este recomandat să configurați Git pentru a permite întotdeauna protocol.file, să activați core.symlinks și să setați numele implicit al ramurii la main (pentru a evita mesajul de avertizare). 
Un fragment de terminal care prezintă comenzi pentru configurarea globală a setărilor Git pentru gestionarea legăturilor simbolice și configurarea ramurii implicite
  1. În directorul hooks este adăugat un script de cârlig postcheckout malițios. Pentru a se asigura că scriptul post-checkout poate fi executat pe dispozitivul utilizatorului, scriptul bash care creează acest cârlig include comanda chmod +x fast/hooks/post-checkout
Un script terminal care afișează o comandă Python codificată malițioasă încorporată într-un cârlig Git post-checkout
  1. O legătură simbolică este creată în depozitul principal, indicând directorul .git.
Un script terminal care demonstrează procesul de confirmare a modificărilor pentru a include utilitare și un fișier .git în depozit
O captură de ecran a unei liste de directoare de depozit cu foldere precum src, libs și .gitmodules afișate într-o interfață Git
Depozitul principal vulnerabil
Captură de ecran a interfeței unui depozit Git care prezintă un director cu un cârlig post-checkout

Dosarul /hooks cu un cârlig post-checkout

Captură de ecran care prezintă comenzile de terminal pentru clonarea unui depozit Git și o sesiune PowerShell cu o conexiune de rețea stabilită
Atunci când utilizatorul clonează acest depozit malițios, atacatorul poate compromite dispozitivul victimei. 

Remediere

Pentru a neutraliza amenințarea, utilizatorii pot dezinstala Git sau aplica cel mai recent patch de securitate. Alternativ, o soluție precum MetaDefender Endpoint poate notifica prompt utilizatorul și poate afișa toate CVE-urile cunoscute din mediu prin interfața sa intuitivă. MetaDefender Endpoint poate detecta și atenua cele mai recente CVE-uri prin valorificarea capacităților sale cu peste 3 milioane de puncte de date și peste 30 000 de CVE-uri asociate cu informații privind gravitatea. Prin implementarea oricărei contramăsuri, CVE va fi complet izolat, eliminând riscul unui atac cibernetic devastator.

Sunteți pregătit să puneți MetaDefender Endpoint în prima linie a strategiei dumneavoastră de securitate cibernetică?


Rămâneți la curent cu OPSWAT!

Înscrieți-vă astăzi pentru a primi cele mai recente actualizări ale companiei, povești, informații despre evenimente și multe altele.