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.
Î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.

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]
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.
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ă:
- Adăugarea funcției dir_contains_only_dotgit pentru a se asigura că directorul submodules nu conține niciun fișier sau director .git.
- 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.
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ă.
De la analiză la exploatare
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:
- Git începe prin a descărca fișiere și directoare din depozitul primar.
- Acesta utilizează definițiile specificate în fișierele symlink pentru a recrea symlink-urile corespunzătoare în sistemul de fișiere local.
- 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ă.
- Dacă depozitul este clonat cu opțiunea --recursive, Git clonează submodulele (depozite externe) și le plasează în directoarele indicate în fișierul .gitmodules.
- 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.
Î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:
- Crearea unui depozit care conține un cârlig post-checkout
- Crearea unui alt depozit care include un submodul, localizat la calea A/modules/x. Noul submodul face trimitere la depozitul creat anterior.
- Crearea unei legături simbolice numită a, care indică folderul .git din indexul Git.
Î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ță.
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:
- 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).
- Î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.
- O legătură simbolică este creată în depozitul principal, indicând directorul .git.
Dosarul /hooks cu un cârlig post-checkout
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ă?