GitHub’daki milyonlarca kurumsal yazılım deposu, bir tehdit aktörünün belirli bir depoya bağlı projeleri kötü amaçlı bir depoya yönlendirdiği nispeten basit bir tür yazılım tedarik zinciri saldırısı olan repojacking’e karşı savunmasızdır.
Aqua Security araştırmacıları bu hafta bir raporda, sorunun GitHub kullanıcısı veya kuruluşu bir projenin adını değiştirdiğinde veya sahipliğini başka bir varlığa devrettiğinde GitHub’ın bağımlılıkları nasıl ele aldığıyla ilgili olduğunu söyledi.
İsim Değişikliği Riskleri
GitHub, kod bağımlılıklarını bozmamak için orijinal depo adı ile yenisi arasında bir bağlantı oluşturur, böylece orijinal depoya bağımlı olan tüm projeler otomatik olarak yeniden adlandırılan yeni depoya yönlendirilir. Bununla birlikte, bir kuruluş eski kullanıcı adını yeterince korumayı başaramazsa, bir saldırgan onu yeniden kullanarak orijinal deponun truva atı uygulanmış bir sürümünü oluşturabilir, böylece depoya dayanan tüm projeler bir kez daha buradan bağımlılıkları indirmeye başlar.
Aqua araştırmacıları bu hafta bir blogda “Bir depo sahibi kullanıcı adını değiştirdiğinde, eski depodan bağımlılıkları indiren herkes için eski ad ile yeni ad arasında bir bağlantı oluşturulur” dedi. “Ancak, herhangi birinin eski kullanıcı adını oluşturması ve bu bağlantıyı kırması mümkündür.”
Aqua’daki araştırmacılar kısa bir süre önce, bazı güvenlik araştırmacılarının tehdide atıfta bulunduğu gibi, GitHub’da bu tür yeniden ele geçirmeye veya bağımlılık deposu ele geçirmeye karşı savunmasız olan havuzların yaygınlığını araştırmaya karar verdi.
Yaygın Sorun
Aqua’nın keşfettiği şey iki yönlüydü: Google ve Lyft gibi şirketlere ait olanlar da dahil olmak üzere bu türden milyonlarca depo GitHub’da mevcut; ve saldırganlar bu depoları bulup ele geçirmek için araçlara kolayca erişebilir. Bu araçlardan biri, GitHub’da taahhütler ve çekme istekleri gibi tüm genel olayların neredeyse eksiksiz bir kaydını tutan bir proje olan GHTorrent’tir. Saldırganlar, kuruluşun daha önce kullandığı depoların GitHub adlarını toplamak için GHTorrent’i kullanabilir. Daha sonra depoyu o eski kullanıcı adı altında kaydedebilir, depoyu yeniden oluşturabilir ve onu kullanan herhangi bir projeye kötü amaçlı yazılım gönderebilirler.
Bir GitHub deposuna doğrudan atıfta bulunan herhangi bir proje, havuzun sahibi kendi havuzunun kullanıcı adını değiştirir veya silerse savunmasızdır.
Aqua Nautilus güvenlik araştırmacısı Yakir Kadkoda, “Saldırganların, kuruluşlara ait önceki depoların adlarını toplamak için kullanabilecekleri önemli bir veri kümesi sunduk” diyor.
Kadkoda, “Kuruluşlar, eski kurum adlarının gizli kalacağını düşünmemeli” uyarısında bulunuyor. “Eski kullanıcı adlarını talep edip GitHub’da tutmaları ve bir saldırgan tarafından potansiyel olarak talep edilebilecek depoları belirlemek için kodlarındaki GitHub URL’lerini ve referanslarını taramaları çok önemlidir.”
Korumaları Aşmak
Kadkoda, GitHub’ın daha önce sahip olunan ve şimdi başka projelere yönlendirilen kullanıcı adlarının ve depoların oluşturulmasını engelleyerek bu sorunu çözmeye çalıştığını söylüyor. GitHub ayrıca, bu tehdidi hafifletmenin bir yolu olarak popüler depo ad alanlarını kullanımdan kaldırmak için birkaç yıl önce bir mekanizma uyguladı. “Ancak, son birkaç yılda birkaç baypas keşfedildi” diyor. Aqua’nın çalışması sırasında araştırmacıları, GitHub tarafından uygulanan korumanın uygulanmadığı birkaç depo örneği buldu. “Dolayısıyla, kullanıcılar bu noktada bu savunmalara tam olarak güvenemezler” diyor.
Aqua’nın blogu, Checkmarx’in geçen yıl keşfettiği bir GitHub güvenlik açığına, saldırganların GitHub’ın yeniden ele geçirmeye karşı koruma girişimlerini atlaması için mevcut yolların bir örneği olarak işaret etti. Kusur, “popüler depo ad alanı kullanımdan kaldırılması” adlı bir mekanizmayı içeriyordu ve Swift, Packagist ve Go gibi paket yöneticilerindeki 10.000’den fazla paket dahil olmak üzere GitHub’daki yeniden adlandırılan tüm kullanıcı adlarını etkiledi. Checkmarx, güvenlik açığıyla ilgili bir raporda, “Repojacking, yeniden adlandırılmış depo URL trafiğini ele geçirmek ve orijinal yönlendirmeyi bozan mantıksal bir kusurdan yararlanarak saldırganın deposuna yönlendirmek için kullanılan bir tekniktir.” “Bir GitHub deposu, yaratıcısı, eski kullanıcı adı kayıt için uygunken kullanıcı adını yeniden adlandırmaya karar verdiğinde yeniden ele geçirmeye karşı savunmasızdır.”
Kadkoda, kuruluşların kodlarını, depolarını ve bağımlılıklarını GitHub bağlantıları için tarayarak repojacking tehdidine maruz kalmalarını azaltabilir, diyor Kadkoda: “Bu bağlantıların doğrudan GitHub projelerine atıfta bulunup bulunmadığını veya diğer kullanıcı adları veya depolar altındaki depolara işaret eden yönlendirmeler olup olmadığını kontrol etmelidirler. orijinal bağlantılardan daha fazla ad.” Bu gibi durumlarda kuruluşlar, saldırganların bunu yapmasını önlemek için mevcut kullanıcı adını talep etmeye çalışmalıdır. “Ayrıca, kuruluşlar her zaman eski kullanıcı adlarını GitHub’da korumalıdır” diyor.