Git'te RCE (uzaktan kod yürütme) saldırılarına olanak tanıyan kritik bir güvenlik açığı kısa süre önce Git ve Microsoft Visual Studio 2017'nin birden çok sürümünü etkileyerek ifşa edildi. Güvenlik açığı, saldırganların Git'teki dosyaların alt modülün çalışma ağacının dışına ve .git/ dizinine yazılmasına izin veren bir hatadan yararlanarak alt modülleri kullanarak Git depolarını manipüle etmesine olanak tanır. Bu hata, bir depo klonlama işlemi devam ederken kötü amaçlı bir kancanın yürütülmesini sağlar [1].
CVE-2024-32002 güvenlik açığı, Microsoft Visual Studio 2017 sürüm 15.9 ve 2.45.1, 2.44.1, 2.43.4, 2.42.2, 2.41.1, 2.40.2 ve 2.39.4'ten önceki Git sürümlerini etkiler. Büyük/küçük harfe duyarlı olmayan işletim sistemlerinde sembolik bağlantı desteğinin etkin olduğu ortamlarda istismar edilebilir.
Git'i Anlamak
Git, yazılım geliştiricilerin kod tabanlarını hızlı ve verimli bir şekilde yönetmelerine yardımcı olmak için tasarlanmış ücretsiz ve açık kaynaklı bir dağıtılmış sürüm kontrol sistemidir. Dosya ve dizinlerdeki değişiklikleri standartlaştırılmış, yapılandırılmış bir şekilde düzenleyerek ve izleyerek geliştirme ekibi üyeleri arasındaki işbirliğini geliştirir.
Git, yazılım geliştirmede yaygın olarak kullanılmaktadır. GitHub, GitLab ve Bitbucket gibi platformlar, güçlü özellikleri nedeniyle geliştiriciler arasındaki işbirliğini geliştirmek için Git'in üzerine inşa edilmiştir:
- Kod dosyalarındaki izlenebilir değişikliklerin kaydedilmesi, taahhütler olarak bilinir.
- Gerektiğinde kod düzenlemelerinin önceki sürümlere geri alınması.
- Farklı dallardan veya katılımcılardan gelen değişiklikleri verimli bir şekilde birleştirmek.
- Değişiklikleri kimin yaptığının ve tarihlerinin kaydının tutulması.

Git Kancaları
git init veya git clone komutları kullanılarak bir Git deposu oluşturulduğunda veya klonlandığında, çalışma ağacının kökünde bir .gitdizini oluşturulur. .git dizininin dizin yapısı başlangıçta aşağıdaki gibi görünür:
Git kancaları, .git/hooks dizininde veya .git/modules/module_type/module_name/hooks dizininde bulunan çalıştırılabilir komut dosyalarıdır. Kancalar, bir Git deposunda belirli olaylar meydana geldiğinde otomatik olarak tetiklenir.
Hooks dizinindeki bir dosya .sample son ekine sahip değilse, bu dosyadaki komutlar dosya adında yer alan pre-commit, post-commit ve post-checkout gibi belirli bir Git eyleminden önce veya sonra yürütülür.
Git Alt Modülleri
Git alt modülü, Git deposu içinde harici bir depodaki belirli bir işleme referans veren bir kayıttır. Bir depoya bir alt modül eklendiğinde, .gitmodules dizininde alt modülün URL'si ile yerel dizini arasındaki eşlemenin meta verilerini içeren yeni bir dosya oluşturulur. Bir depo birden fazla alt modül içerdiğinde, .gitmodules dosyası her biri için bir girdi içerecektir. [3]
Sembolik Bağlantılar (Symlinks)
Sembolik bağlantı veya yazılım bağlantısı olarak da adlandırılan sembolik bağlantı, yolunu belirterek başka bir dosya veya dizine ("hedef" olarak adlandırılır) işaret eden bir dosyadır. Bir sembolik bağlantı silinirse, hedefi etkilenmeden kalır. [4]
Git'te bir symlink, başka bir dosyaya referans veya kısayol olarak işlev görmesini sağlamak için meta veriler içeren bir dosya olarak oluşturulur. Symlinkler, içeriğini kopyalamadan bir dosyaya birden fazla referans oluşturmak için kullanılabilir.
GIT Güvenlik Açığı Analizi
Yama Analizi
Güvenlik açıklarını daha iyi anlamak için güvenlik uzmanları genellikle yama analizi yaparlar. Bu, savunmasız işlevleri ve potansiyel saldırı vektörlerini belirlemeye yardımcı olan bir tekniktir. OPSWAT Fellows, CVE-2024-32002 güvenlik açığını gidermek için yamalı sürümde yapılan değişiklikleri inceledi ve bu CVE'yi gidermek için iki dosyanın güncellendiğini tespit etti.
Güncellenen dosyalardan biri, Git alt modül klonlamasını işleyen kodu içeren submodule--helper.c dosyasıdır. Yamalı sürümdeki yeni taahhüt aşağıdaki ikisini içeriyordu:
- Alt modüller dizininin herhangi bir .git dosyası veya dizini içermediğinden emin olmak için dir_contains_only_dotgit işlevinin eklenmesi.
- clone_submodule() fonksiyonunda, alt modül dizininin var olup olmadığını ve boş olup olmadığını kontrol etmek için bir koşul içerecek şekilde değişiklikler yapıldı. Dizin boş değilse, klonlama işlemi iptal edilecektir.
Yeni taahhütteki ikinci güncelleme t/t7406-submodule-update.sh dosyasında yapıldı ve güvenlik açığının giderildiğini doğrulamak için bir test betiği eklendi.
Analizden İstismara
Yama analizinden ve CVE-2024-32002 güvenlik açığının tanımlanmasından elde edilen içgörülere ek olarak, OPSWAT Bursiyerleri Git'teki sembolik bağlantıların ve alt modüllerin iş akışını araştırmak için çalıştılar. Bir kullanıcı bir depoyu klonladığında gerçekleşen olayların sırasını çözdüler:
- Git, dosyaları ve dizinleri birincil depodan indirerek başlar.
- Yerel dosya sisteminde karşılık gelen sembolik bağlantıları yeniden oluşturmak için sembolik bağlantı dosyalarında belirtilen tanımları kullanır.
- Ortak bağlantı mevcut bir dosyaya işaret ediyorsa, ortak bağlantı işlevsel olacaktır; aksi takdirde, hedef geri yüklenene kadar ortak bağlantı çalışmaz durumda kalır.
- Depo --recursive seçeneği ile klonlanırsa, Git alt modülleri (harici depolar) klonlar ve bunları .gitmodules dosyasında belirtildiği gibi dizin yollarına yerleştirir.
- Bir sembolik bağlantı alt modül yolunun bir parçasıysa (örneğin, util/module/test, burada util sembolik bağlantı_klasör gibi başka bir dizine işaret eden bir sembolik bağlantıdır), Git alt modül içeriğini sembolik bağlantının referans verdiği asıl dizinde (örneğin, sembolik bağlantı_klasör/module/test) depolarken orijinal sembolik bağlantı yolu üzerinden erişime izin verir.
CVE-2024-32002 Git Güvenlik Açığını Anlama
Kötü Amaçlı Depolar Oluşturma
OPSWAT Fellows,t/t7406-submodule-update.sh dosyası için yapılan güncellemelere dayanarak kötü amaçlı depoların oluşturulmasını daha ayrıntılı olarak inceledi ve bu süreci aşağıdaki adımlara ayırdı:
- Ödeme sonrası kancası içeren bir depo oluşturma
- A/modules/x yolunda bulunan bir alt modülü içeren başka bir depo oluşturma. Yeni alt modül daha önce oluşturulan depoya referans verir.
- Git dizinindeki .git klasörüne işaret eden a adlı bir sembolik bağlantı oluşturma.
Güvenlik Açığını Anlama
Bir kullanıcı --recursive seçeneğini kullanarak önceki adımda oluşturulan kötü amaçlı bir depoyu klonladığında, post-checkout kancasındaki kötü amaçlı komut dosyası tetiklenir ve saldırganın kullanıcının cihazını tehlikeye atmasına izin verir.
Bu uzaktan kod çalıştırma, ana deponun klonlandığında .git dizinini işaret eden a adlı sembolik bir bağlantı algılaması nedeniyle oluşur. Özyinelemeli mod etkinleştirildiğinde, alt modüller de klonlanan depoya çekilir. Bu depo, kontrol sonrası kanca komut dosyasını içeren bir hooks klasörü içerir ve yerel dizini A/modules/x dizinindedir.
a,.git dizinine işaret ettiğinden ve dosya sistemi büyük/küçük harf duyarsız olduğundan, A, a'ya eşdeğer olarak yorumlanır. Git, post-checkout kanca betiğini .git/modules/query/fast/hooks/ dizinine yazması için yanlış yönlendirilir. . git/modules/{module_type}/{module_name}/hooks klasöründe bir post-checkout kanca betiği bulunursa, ana depo --recursive seçeneği ile klonlandığında tetiklenir. Sonuç olarak, saldırganlar uzaktan kod çalıştırarak kullanıcının cihazını başarıyla tehlikeye atabilir.
Git Güvenlik Açığından Yararlanmanın Simülasyonu
Önceki bulgulara dayanarak, OPSWAT Fellows kötü niyetli bir depo oluşturmayı simüle etmek için bir ana depo ve kanca oluşturdu:
- Başlangıçta, Git'in her zaman protocol.file dosyasına izin verecek şekilde yapılandırılması, core.symlinks'in etkinleştirilmesi ve varsayılan dal adının main olarak ayarlanması (uyarı mesajından kaçınmak için) önerilir.
- Hooks dizinine kötü amaçlı bir post-checkout kanca betiği eklenir. Post-checkout betiğinin kullanıcının cihazında çalıştırılabilmesini sağlamak için, bu kancayı oluşturan bash betiği chmod +x fast/hooks/post-checkout komutunu içerir.
- Ana depoda .git dizinine işaret eden bir sembolik bağlantı oluşturulur.
Ödeme sonrası kancası içeren /hooks klasörü
İyileştirme
Tehdidi etkisiz hale getirmek için kullanıcılar Git'i kaldırabilir veya en son güvenlik yamasını uygulayabilir. Alternatif olarak, MetaDefender Endpoint gibi bir çözüm, kullanıcıyı anında bilgilendirebilir ve sezgisel arayüzü aracılığıyla ortamdaki bilinen tüm CVE'leri görüntüleyebilir. MetaDefender Endpoint , 3 milyondan fazla veri noktası ve 30.000'den fazla Önem Derecesi Bilgisine sahip İlişkili CVE ile yeteneklerinden yararlanarak en son CVE'leri tespit edebilir ve azaltabilir. Her iki karşı önlemin uygulanmasıyla, CVE tamamen kontrol altına alınacak ve yıkıcı bir siber saldırı riski ortadan kalkacaktır.
MetaDefender Endpoint 'i siber güvenlik stratejinizin ön saflarına koymaya hazır mısınız?