2 puan yazan GN⁺ 2024-05-26 | 1 yorum | WhatsApp'ta paylaş

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üşü

  1. 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.
  2. İ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.
  3. 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.
  4. 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.
  5. 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

 
GN⁺ 2024-05-26
Hacker News görüşü

Hacker News yorumları derleme özeti

  • Çevrimiçi hizmetlerin kötüye kullanılabilme ihtimali

    • Tüm çevrimiçi hizmetler eninde sonunda komuta ve kontrol, telif hakkı ihlali, CSAM barındırma gibi amaçlarla kötüye kullanılabilir. Twitter, Telegram, PGP anahtar altyapısı gibi örneklerde bunun benzerleri zaten görüldü.
  • Google'ın dosya barındırma sorunu

    • Google kötü amaçlı dosya barındırma sorunlarıyla sık sık uğraştığı için, Go ekibinin GCP ve Drive ile iş birliği yapmış olması muhtemel. Bu, Google'ın zaten izin verdiği diğer endpoint'lerden çok da farklı değil.
  • GitHub ile karşılaştırma

    • Bunun GitHub'a dosya yüklemekten çok farklı olmadığı yönünde bir görüş var. GitHub'da da yalnızca bir hesabınız varsa rastgele veri depolayabilirsiniz.
  • PyPI'daki Python dışı projeler

    • PyPI'da Python dışı projeler de bulunuyor ve kullanıcıların kütüphane kodunu derleyemediği durumlar için wheel (derlenmiş ikili dosya) dağıtma özelliğine ihtiyaç var. C ve Golang ile yazılmış kodlar da buna dahil olabilir.
  • Golang proxy ve checksum log'u

    • Golang proxy ve sumdb kullanarak rastgele URL checksum'larını şeffaf biçimde kaydetme fikrini denemiş olma deneyiminden bahsediliyor.
  • Alan adı incelemesi

    • Belirli bir alan adı incelendiğinde beklenen içeriğin büyük kısmının gerçekten bulunduğu görülmüş.
  • Bilinen sorun

    • Golang'ın bilinen bir sorununa dair bağlantı paylaşılmış.
  • CUE'nin modül sistemi

    • CUE'nin modül sistemi kullanıma sunuluyor; Go'nun MVS'si beğenilse de bu sistem OCI altyapısı üzerine kurulmuş. Bağımlılık yönetim sistemleriyle ilgileniyorsanız ilgili bağlantılara bakabilirsiniz.
  • Web cache sorunu

    • W3C web'deki her şeyi cache'lenebilir hale getirdi ama genel amaçlı proxy cache'lerin neden neredeyse hiç olmadığı sorgulanıyor. Yayıncıların gereksiz yere kısa "Cache-Control: max-age" ya da "Vary: Cookie" yanıtları gönderip göndermediği veya çok fazla ISP'nin transit maliyeti ödeyip ödemediği merak ediliyor.
  • Proxy cache sorunu

    • Proxy'nin Go dışı depoları cache'lemesi israf olabilir; ancak Go depolarını cache'lemesine izin verirseniz rastgele veri depolanabilir. Bunun büyük bir sorun olmadığı düşünülüyor.