Sorun
- Dün gece Go'nun checksum veritabanının içeriğini incelerken ilginç bir sonuç fark ettim.
sqlite> select path, count(path) from modules group by path order by count(path) desc; komutunu çalıştırdığımda sonuçlar şunlardı:
github.com/homebrew/homebrew-core|39438
github.com/Homebrew/homebrew-core|30896
github.com/concourse/concourse|25372
github.com/openshift/release|24065
github.com/cilium/cilium|22138
- Homebrew'nin Ruby kullandığı biliniyor, bu yüzden Go ile bağlantısı soru işareti yarattı.
- GitHub dil istatistikleri de bunu doğruladı.
- Go ile ilgili dosyaları (
go.mod veya Go kaynak dosyaları) bulmak için depoyu klonladım, ancak hiçbir şey bulamadım.
Araştırma
- Yeni bir gün başladı ve merakım cevap istiyordu.
- Git deposu Go koduyla ilgili değilse, Go checksum veritabanında nasıl göründüğünü merak ettim.
proxy.golang.org'un varsayılan modül proxy'si, sum.golang.org'un ise checksum veritabanı olduğunu öğrendim.
- Go dokümantasyonunu okuyunca, modül sürümü henüz loga kaydedilmemişse checksum veritabanının modülü kaynak sunucudan getirmeye çalıştığını öğrendim.
- Yeni bir Go modül deposunun checksum veritabanına ve proxy'ye eklenip eklenmediğini doğrulamak için
lookup endpoint'ini çağırdım.
- Yeni bir Go modülü oluşturup GitHub hesabıma yükledikten sonra
lookup komutunu iki farklı biçimde denedim, ancak ikisi de hata verdi.
- Doğru pseudo-version'ı oluşturup checksum veritabanını yeniden sorgulayarak modülün indirilip indirilmediğini kontrol ettim.
- Proxy'yi sorgulayıp modül
zip dosyasını indirerek Go altyapısında rastgele veri depolanabildiğini kanıtladım.
Kötüye kullanım olasılıkları
- Geliştirici makinelerinde ve CI/CD sunucularında indirme kısıtlamalarını aşmak için kullanılabilir.
- Zararlı yazılımlar payload'larını depolayıp gerektiğinde proxy'den çekebilir.
proxy.golang.org'a karşı hizmet engelleme (DoS) saldırısı mümkün olabilir.
- Komuta ve kontrol (C2) sistemi kolayca uygulanabilir.
Sonuç
- Checksum veritabanı sürecinin nasıl çalıştığını anlamış oldum.
- Şu an için Go altyapısında ciddi bir sorun görünmese de kötüye kullanılma potansiyeli var.
- Go dışı projelerin neden veritabanında bulunduğuna dair ek sorular hâlâ duruyor.
- Bu araştırma bana birçok fikir verdi ve daha fazla incelemeyi planlıyorum.
GN⁺ görüşü
- Güvenlik açığı: Bu yazı, Go'nun checksum veritabanının rastgele veri depolayabilmesine işaret eden bir güvenlik açığını ortaya koyuyor. Bu durum, zararlı kodların kolayca dağıtılabileceği bir yol sağlayabilir.
- İyileştirme gerekliliği: Go altyapısının güvenliğini ve bütünlüğünü güçlendirmek için checksum veritabanı ile proxy sunucusundaki erişim kontrollerinin iyileştirilmesi gerekiyor.
- Diğer dillerle entegrasyon: Go checksum veritabanında Go dışı projelerin neden yer aldığının netleştirilmesi ve bunu önlemek için ek doğrulama süreçlerinin uygulanması gerekiyor.
- Geliştirici eğitimi: Geliştiricilerin bu tür güvenlik açıklarının farkında olması ve bunları önlemenin en iyi yollarını anlaması için eğitim verilmesi gerekiyor.
- Alternatif çözümler: Benzer işlevler sunan diğer dillerdeki checksum veritabanları ve proxy sunucuları karşılaştırılarak Go altyapısının iyileştirilmesinde referans alınabilir.
1 yorum
Hacker News görüşü
Hacker News yorumları derleme özeti
Çevrimiçi hizmetlerin kötüye kullanılabilme ihtimali
Google'ın dosya barındırma sorunu
GitHub ile karşılaştırma
PyPI'daki Python dışı projeler
Golang proxy ve checksum log'u
Alan adı incelemesi
Bilinen sorun
CUE'nin modül sistemi
Web cache sorunu
Proxy cache sorunu