- Git deposundaki carriage return karakterlerini kullanan bir saldırı tekniği tanıtılıyor
- Bu zafiyet, uzaktan kod çalıştırma (RCE) olasılığına yol açıyor
- Belirli
git clone süreçlerinde kötü amaçlı komutlar çalıştırılabiliyor
- Etkinin Linux ve Windows ortamlarında görüldüğü doğrulandı
- Güvenlik açısından zayıf git depo yönetiminin riskleri vurgulanıyor
Carriage return karakteri ve Git zafiyeti
- Git deposu içinde carriage return (
\r) karakteri içeren dosya adları oluşturulabiliyor
- Bu tür dosya adlarını içeren bir depo
git clone ile kopyalandığında, komut yorumlama sürecinde istenmeyen komutların çalıştırılması mümkün hale gelebiliyor
Uzaktan kod çalıştırma (RCE) senaryosu
- Saldırgan, carriage return karakteri eklenmiş bir dosyayı depoya ekleyip commit ediyor
- Kullanıcı bu depoyu
git clone ile klonladığında, dosya sistemi ve git komutlarının hatalı yorumlanması nedeniyle istenmeyen kod çalıştırma riski ortaya çıkıyor
- Özellikle hook script'lerinin (ör.
.git/hooks klasöründeki kodlar) otomatik çalıştırılması sağlanabiliyor
Etkilenen ortamlar ve alınacak önlemler
- Linux ve Windows dahil çeşitli işletim sistemlerindeki git sürümlerinde görülebiliyor
- Git depolarını yöneten veya sık sık harici depoları klonlayan geliştiriciler ve şirketler için ciddi bir güvenlik tehdidi oluşturuyor
Güvenlik önerileri
- Güvenilmeyen harici git depolarını klonlarken en güncel sürümü kullanmak ve güvenlik durumunu kontrol etmek gerekiyor
- Depo içindeki olağandışı karakterler (özellikle carriage return gibi) içeren dosya adları tespit edilmeli ve klonlamadan önce incelenmeli
1 yorum
Hacker News görüşü
Tüm bunların sonucu olarak, alt modül klonu yapılırken okumanın
path = ...biçiminde gerçekleşip yazmanın ise^Mile bitmeyen başka bir yola yapılabildiği durum açıklanıyorYazıda sözü edilen "uzaktan kod çalıştırma"nın burada tam olarak nasıl gerçekleştiği ve güvenlik açısından ne kadar ciddi olduğu soruluyor
Henüz bir PoC yayımlanmadı, ancak bunun CVE-2024-32002 exploit'inin neredeyse aynen değiştirilmiş hâli olduğu ve bunu düzelten commit'teki testlerin de büyük ipuçları verdiği belirtiliyor
CVE-2024-32002 açıklamasından alıntı: Alt modül içeren bir depo kötü niyetle hazırlanarak Git'teki bir hatadan yararlanıp dosyaları alt modül worktree'sine değil
.git/dizinine yazabiliyor. Bu sayede klonlama sırasında hemen çalışan bir hook yazılabiliyor ve kullanıcıya gerçekten çalışacak kodu inceleme fırsatı bile kalmayabiliyorÖzetle, depoya kötü amaçlı bir git hook yerleştirilebiliyor; normalde git hook'ları
git clonesırasında kurulmaz, ancak bu saldırı bunu mümkün kılarak klon sürecinde hook çalıştırılabilmesini sağlıyorYeni CVE hakkında daha fazla bilgiye buradan ulaşılabileceği belirtiliyor
post-checkouthook'u üzerinden rastgele kod çalıştırabildiği söyleniyorRastgele dosya yazma imkânı varsa bunun çoğu zaman RCE'ye uzanabildiği şeklindeki basit ama rahatsız edici gerçek dile getiriliyor
Ad-hoc DSL ile yapılandırma dosyası yazmanın risklerinden söz ediliyor
Çoğu durumda sözdizimi için resmî bir spesifikasyon olmadığı ve parse etmenin gerçek ölçütünün elde yazılmış serileştirme/serisizleştirme kodlarına dağılmış olduğu eleştiriliyor
İkisi farklı davranmaya başladığında (örneğin parser'a yeni sözdizimi eklenip writer'a eklenmemesi gibi) parser farklarının patlamaya hazır bir bomba hâline gelebileceği vurgulanıyor
Çıkarılan dersin, tek bir source of truth olması ve buna bağlı parçaların bunun üzerinden otomatik üretilmesi gereken bir yapı olduğu söyleniyor
Bu hatanın source of truth sorunundan ayrı olduğu da belirtiliyor
Burada kullanılan DSL'in (ini dosya biçimi) ad-hoc olsa da çok yaygın, tanıdık ve yeterince düzenli olduğu, bu yüzden pratikte çoğu zaman yeterli bir spesifikasyon sayılabileceği görüşü paylaşılıyor
Sorun bizzat yeniden üretilmiş ve bu depoya yüklenmiş
Hemen Git'in en güncel sürümüne geçmeye çalıştığı, ancak bunun Arch'ta henüz bulunmadığı söyleniyor
Yeni yama gelene kadar
pullyapmaktan kaçınacağı, otomatik pull yapan popüler depolarda sorun çıkabileceği için yükseltmenin zaman alabileceğinden endişe edildiği belirtiliyorBu açığın yama çıkmadan önce mi kamuya açıklandığı soruluyor
Mevcut exploit'te "yalnızca basit bir varyasyon" yapıldığı ifadesi görülünce Git'in neden Landlock kullanmadığı soruluyor (Landlock, Linux'a özgü bir sandbox güvenlik özelliğidir)
git cloneişleminin config dizinine salt-okunur erişim, hedef klon dizinine okuma/yazma erişimi ve alt süreç çağrılarının yasaklanmasıyla çalışması gerektiği öne sürülüyorHer exploit'te sürekli hesap makinesi açılmasını tiye alan bir yorum yapılıyor
Alt süreç çağrılarının yasaklanmasının
post-checkoutgibi tüm git hook'larını bozacağına dikkat çekiliyorseccompbenzeri konteyner ortamlarında Git çalıştırılabileceği, ancak pek çok özelliğin kısıtlanacağı açıklanıyorAyrıca alt süreçler olmadan SSH üzerinden Git kullanımının da mümkün olmayacağı belirtiliyor
Homebrew'ün kendisinin sorunlu olup olmadığı, yani recursive clone yapıp yapmadığı soruluyor
Bu kodda buna dair bir olasılık bulunduğu söyleniyor
Homebrew'ün amacının zaten depo kodunu çalıştırmak olduğu, bu yüzden recursive clone yoksa asıl bunun garip olacağı görüşü paylaşılıyor
Jon Postel'in CR+LF ile ilgili ünlü sözü görünce nostalji yaşandığı anlatılıyor
git blameçıktısına göre sorunlu kodun 19 yıl önce yazıldığı ve bunun Bernstein'ın 10. yıl dönümü değerlendirmesiyle zamansal olarak çakıştığı belirtiliyorHomebrew'de git 2.50.1 güncellemesi henüz olmadığı için biraz daha beklemek gerekeceği söyleniyor
brew install git --HEADile güncelleme denenebileceği belirtiliyorHem Homebrew hem de Debian Bookworm'un hâlâ savunmasız sürümleri sunduğu bilgisi paylaşılıyor
Dizin listesini getiren sistem çağrısının, dosya adında ASCII kontrol karakterleri (byte'lar) varsa bu dosyanın varlığını reddetmesi mi, bunu disk bozulması sayması mı yoksa başka türlü mü davranması gerektiği sorgulanıyor
Geçerli locale'de bu byte'ların başka anlamlar taşıyabileceği, Windows'taki gibi tüm dosya adlarının UTF-16 olduğunu varsaymadığımız için beklenmedik durumlar çıkabileceği belirtiliyor
Unix benzeri sistemlerde dosya adlarının (ve diğer dizelerin) sadece birer byte dizisi olmasının yol açtığı bir sorun olduğu kısaca ifade ediliyor