
Sebuah kerentanan kritis di Git yang memungkinkan terjadinya serangan RCE (eksekusi kode jarak jauh) baru-baru ini terungkap, yang memengaruhi beberapa versi Git dan Microsoft Visual Studio 2017. Kerentanan ini memungkinkan penyerang memanipulasi repositori Git menggunakan submodul, dengan memanfaatkan bug di Git yang memungkinkan file ditulis di luar pohon kerja submodul dan masuk ke direktori .git/. Bug ini memungkinkan eksekusi hook berbahaya saat operasi kloning repositori masih berjalan [1].
Kerentanan CVE-2024-32002 memengaruhi Microsoft Visual Studio 2017 versi 15.9 dan Git versi yang lebih lama dari 2.45.1, 2.44.1, 2.43.4, 2.42.2, 2.41.1, 2.40.2, dan 2.39.4. Kerentanan ini dapat dieksploitasi di lingkungan di mana dukungan tautan simbolik diaktifkan pada sistem operasi yang tidak membedakan huruf besar-kecil.

Memahami Git
Git adalah sistem kontrol versi terdistribusi yang gratis dan bersumber terbuka, yang dirancang untuk membantu pengembang perangkat lunak mengelola basis kode dengan cepat dan efisien. Sistem ini meningkatkan kolaborasi di antara anggota tim pengembangan dengan mengatur dan melacak perubahan pada berkas dan direktori secara terstandarisasi dan terstruktur.
Git banyak digunakan dalam pengembangan perangkat lunak. Platform seperti GitHub, GitLab, dan Bitbucket dibangun di atas Git untuk meningkatkan kolaborasi di antara para pengembang berkat fitur-fiturnya yang canggih:
- Mencatat perubahan yang dapat dilacak pada berkas kode, yang dikenal sebagai commit.
- Mengembalikan perubahan kode ke versi sebelumnya jika diperlukan.
- Menggabungkan perubahan dari berbagai cabang atau kontributor secara efisien.
- Menyimpan catatan riwayat mengenai siapa saja yang melakukan perubahan serta tanggal-tanggalnya.

Git Hooks
Saat repositori Git dibuat atau dikloning, menggunakan perintah `git init ` atau `git clone `, direktori ` .git` akan dibuat di akar pohon kerja. Struktur direktori ` .git ` pada awalnya terlihat seperti ini:
Hook Git adalah skrip yang dapat dieksekusi, yang terletak di direktori .git/hooks atau di direktori .git/modules/module_type/module_name/hooks. Hook akan terpicu secara otomatis ketika peristiwa tertentu terjadi di dalam repositori Git.
Apabila sebuah berkas di direktori `hooks` tidak memiliki akhiran `.sample `, perintah-perintah dalam berkas tersebut akan dijalankan sebelum atau sesudah tindakan Git tertentu yang tercantum dalam nama berkas, seperti ` pre-commit`, `post-commit`, dan `post-checkout`.
Submodul Git
Submodul Git adalah entri dalam repositori Git yang merujuk pada commit tertentu di repositori eksternal. Saat submodul ditambahkan ke repositori, sebuah berkas baru akan dibuat di direktori .gitmodules yang berisi metadata pemetaan antara URL submodul dan direktori lokalnya. Jika sebuah repositori berisi beberapa submodul, berkas .gitmodules akan memuat satu entri untuk masing-masing submodul. [3]


Tautan Simbolik (Symlinks)
Tautan simbolis, yang juga dikenal sebagai symlink atau tautan lunak, adalah sebuah berkas yang mengarah ke berkas atau direktori lain (yang disebut sebagai "target") dengan menentukan jalurnya. Jika sebuah symlink dihapus, targetnya tetap tidak terpengaruh. [4]
Tautan simbolis (symlink) di Git dibuat sebagai berkas yang dilengkapi metadata agar berfungsi sebagai referensi atau jalan pintas ke berkas lain. Tautan simbolis dapat digunakan untuk membuat beberapa referensi ke suatu berkas tanpa menyalin isinya.


Analisis Kerentanan Keamanan GIT
Analisis Patch
Untuk memperoleh pemahaman yang lebih mendalam mengenai kerentanan keamanan, para pakar keamanan sering kali melakukan analisis patch. Teknik ini membantu mengidentifikasi fungsi-fungsi yang rentan serta vektor serangan potensial. Para anggota OPSWAT Fellows meneliti perubahan yang dilakukan pada versi yang telah diperbarui untuk mengatasi kerentanan CVE-2024-32002, dan mereka menemukan bahwa dua berkas telah diperbarui untuk mengatasi CVE tersebut.
Salah satu berkas yang diperbarui adalah berkas ` submodule--helper.c`, yang berisi kode yang menangani kloning submodul Git. Komit baru dalam versi yang telah diperbaiki mencakup dua hal berikut:
- Menambahkan fungsi ` dir_contains_only_dotgit ` untuk memastikan bahwa direktori submodul tidak berisi file atau direktori .git apa pun.

- Fungsi ` clone_submodule()` telah diubah dengan menambahkan kondisi untuk memeriksa apakah direktori submodul sudah ada dan kosong. Jika direktori tersebut tidak kosong, proses kloning akan dihentikan.

Pembaruan kedua dalam commit baru tersebut terdapat pada berkas t/t7406-submodule-update.sh, yang menambahkan skrip pengujian untuk memastikan bahwa kerentanan keamanan telah diperbaiki.

Dari Analisis hingga Pemanfaatan
Selain wawasan yang diperoleh dari analisis patch dan uraian mengenai kerentanan CVE-2024-32002, para peserta program OPSWAT juga melakukan penyelidikan terhadap alur kerja symlink dan submodul di Git. Mereka menguraikan urutan peristiwa yang terjadi saat seorang pengguna mengkloning sebuah repositori:
- Git dimulai dengan mengunduh berkas dan direktori dari repositori utama.
- Proses ini memanfaatkan definisi yang tercantum dalam berkas tautan simbolik untuk membuat ulang tautan simbolik yang sesuai di sistem berkas lokal.
- Jika tautan simbolik tersebut mengarah ke berkas yang sudah ada, tautan simbolik tersebut akan berfungsi; sebaliknya, tautan simbolik tersebut tidak akan berfungsi sampai berkas tujuannya dipulihkan.
- Jika repositori dikloning dengan opsi --recursive, Git akan mengkloning submodul (repositori eksternal) dan menempatkannya di jalur direktori sebagaimana tercantum dalam berkas .gitmodules.
- Jika tautan simbolis (symlink) merupakan bagian dari jalur submodul (misalnya, util/module/test, di mana util adalah tautan simbolis yang mengarah ke direktori lain, seperti symlink_folder), Git akan menyimpan isi submodul di direktori sebenarnya yang dirujuk oleh tautan simbolis tersebut (misalnya, symlink_folder/module/test), sambil tetap memungkinkan akses melalui jalur tautan simbolis aslinya.

Memahami Kerentanan Keamanan Git CVE-2024-32002
Membuat Repositori Berbahaya
OPSWAT Para peneliti kemudian meneliti lebih lanjut proses pembuatan repositori berbahaya berdasarkan pembaruan yang dilakukan pada berkast/t7406-submodule-update.sh dan menguraikan proses ini menjadi langkah-langkah berikut:
- Membuat repositori yang berisi hook pasca-checkout

- Membuat repositori baru yang mencakup submodul, yang terletak di jalur A/modules/x. Submodul yang baru ini merujuk ke repositori yang telah dibuat sebelumnya.

- Membuat tautan simbolis bernama a, yang mengarah ke folder .git dalam indeks Git.


Memahami Kelemahan Keamanan
Ketika seorang pengguna mengkloning repositori berbahaya—yang dibuat pada langkah sebelumnya—menggunakan opsi --recursive, skrip berbahaya dari hook post-checkout akan dijalankan, sehingga memungkinkan penyerang untuk mengkompromikan perangkat pengguna.
Eksekusi kode jarak jauh ini terjadi karena repositori utama mendeteksi tautan simbolis bernama `a` yang mengarah ke direktori `.git ` saat proses kloning dilakukan. Dengan mode rekursif yang diaktifkan, submodul juga dimasukkan ke dalam repositori hasil kloning. Repositori ini berisi folder `hooks`, yang berisi skrip hook ` post-checkout `, dan direktori lokalnya berada di `A/modules/x`.
Karena a mengacu ke direktori.git dan sistem berkas tidak membedakan huruf besar-kecil, A diartikan sama dengan a. Git menjadi tertipu sehingga menulis skrip hook post-checkoutke dalam direktori .git/modules/query/fast/hooks/. Jika skrip hook post-checkout ditemukan di folder ` .git/modules/{module_type}/{module_name}/hooks `, skrip tersebut akan dijalankan saat repositori utama dikloning dengan opsi ` --recursive `. Akibatnya, penyerang dapat berhasil mengkompromikan perangkat pengguna dengan menjalankan kode jarak jauh.

Simulasi Eksploitasi Kerentanan Git
Berdasarkan temuan sebelumnya, para peserta program OPSWAT Fellows membuat sebuah repositori utama dan hook untuk mensimulasikan pembuatan repositori berbahaya:
- Pada awalnya, disarankan untuk mengonfigurasi Git agar selalu mengizinkan `protocol.file`, mengaktifkan `core.symlinks`, dan menetapkan nama cabang default menjadi `main` (untuk menghindari pesan peringatan).

- Sebuah skrip hook post-checkout yang berbahaya telah ditambahkan ke direktori hooks. Untuk memastikan bahwa skrip post-checkout tersebut dapat dijalankan di perangkat pengguna, skrip bash yang membuat hook ini menyertakan perintah chmod +x fast/hooks/post-checkout.

- Sebuah tautan simbolis dibuat di repositori utama, yang mengarah ke direktori .git.



Folder /hooks yang berisi hook post-checkout

Remediasi
Untuk menetralkan ancaman tersebut, pengguna dapat menghapus instalasi Git atau menerapkan patch keamanan terbaru. Sebagai alternatif, solusi seperti MetaDefender Endpoint dapat segera memberi tahu pengguna dan menampilkan semua CVE yang diketahui di dalam lingkungan tersebut melalui antarmuka yang intuitif. MetaDefender Endpoint dapat mendeteksi dan memitigasi CVE terbaru dengan memanfaatkan kemampuannya yang didukung oleh lebih dari 3 juta titik data dan lebih dari 30.000 CVE terkait beserta informasi tingkat keparahan. Dengan menerapkan salah satu dari kedua tindakan pencegahan tersebut, CVE akan sepenuhnya terkendali, sehingga menghilangkan risiko serangan siber yang menghancurkan.
Apakah Anda siap menjadikan MetaDefender Endpoint sebagai garda terdepan dalam strategi keamanan siber Anda?
