Milyonlarca GitHub deposu, saldırganların çok sayıda kullanıcıyı etkileyen tedarik zinciri saldırıları gerçekleştirmesine yardımcı olabilecek “RepoJacking” olarak da bilinen bağımlılık deposu ele geçirmeye karşı savunmasız olabilir.
Uyarı, 1,25 milyon GitHub deposu örneğini analiz eden ve bunların yaklaşık %2,95’inin RepoJacking’e karşı savunmasız olduğunu bulan AquaSec’in güvenlik ekibi ‘Nautilus’tan geliyor.
Araştırmacılar, bu yüzdeyi GitHub’ın 300 milyondan fazla olan tüm depo tabanına tahmin ederek, sorunun yaklaşık 9 milyon projeyi etkilediğini tahmin ediyor.
RepoJacking nedir?
Kuruluşlar satın alma veya birleşme yoluyla yeni yönetim elde edebildiğinden veya yeni bir marka adına geçebildiğinden GitHub’da kullanıcı adı ve depo adı değişiklikleri sık görülür.
Bu olduğunda, adını değiştiren havuzlardan kod kullanan projeler için bağımlılıkları kırmamak için bir yeniden yönlendirme oluşturulur; ancak birisi eski adı kaydettirirse, bu yeniden yönlendirme geçersiz hale gelir.
RepoJacking, kötü niyetli bir aktörün bir kullanıcı adını kaydettiği ve geçmişte bir kuruluş tarafından kullanılan ancak o zamandan beri adını değiştiren bir havuz oluşturduğu bir saldırıdır.
Bunu yapmak, saldırıya uğrayan projenin bağımlılıklarına dayanan herhangi bir proje veya kodun, kötü amaçlı yazılım içerebilecek saldırgan tarafından kontrol edilen havuzdan bağımlılıklar ve kod getirmesiyle sonuçlanır.
GitHub bu olasılığı biliyor ve RepoJacking saldırıları için bazı savunmalar uyguladı. Ancak AquaSec, çözümlerin şu ana kadar eksik olduğunu ve kolayca atlatıldığını bildiriyor.
Örneğin, GitHub yalnızca çok popüler projeleri korur, ancak bu projeler daha az popüler, savunmasız bir havuzdan bir bağımlılık kullanabilir ve bu nedenle tedarik zinciri uzlaşması onları da etkiler.
Ayrıca GitHub, kötü amaçlı hazırlıklara işaret ederek, adı değiştirmeden önceki hafta depoları 100’den fazla klonla koruyor. Bu koruma, yeniden adlandırılmasından veya mülkiyet devrinden sonra popüler hale gelen projeleri kapsamaz.
Sömürü potansiyeli
AquaSec, sorunun önemini vurgulamak için ünlü kuruluşları savunmasız havuzlar için taradı ve Google ve Lyft tarafından yönetilen depolarda kötüye kullanılabilir vakalar buldu.
Google’ın durumunda, oldukça popüler olan “Mathsteps” projesinin oluşturulmasıyla ilgili talimatları içeren bir benioku dosyası, Google’ın 2018’de satın alıp asimile ettiği ve artık var olmayan Socratic şirketine ait bir GitHub deposuna işaret ediyordu.
Saldırgan yeniden yönlendirmeyi kırmak için bu depoyu klonlayabildiğinden, benioku talimatlarını izleyen kullanıcılar hileli depodan kötü amaçlı kod indirmiş olabilir.
Ayrıca, talimatlar bağımlılık için bir “npm install” komutu içerdiğinden, saldırganın kodu, şüphelenmeyen kullanıcıların cihazlarında rasgele kod yürütmeyi başarabilir.
Lyft söz konusu olduğunda, AquaSec şirketin deposunda başka bir depodan bir ZIP arşivi getiren ve RepoJacking’e karşı savunmasız olan bir yükleme komut dosyası bulduğundan, saldırı daha otomatik olacaktır.
Doğru adlarla (bu durumda “YesGraph” ve “Dominus”) yeni bir kullanıcı adı ve depo kaydeden bir saldırgan, Lyft’in “install.sh” komut dosyasını yürüten herkese kodlarını enjekte edebilir.
Çözüm
Ne yazık ki, RepoJacking riski yaygındır, hafifletilmesi zordur ve kuruluşlar ve kullanıcılar için ciddi sonuçları olabilir.
Proje sahipleri, dış havuzlardan getirdikleri kaynakları mümkün olduğunca en aza indirmelidir.
Ek olarak, sahipler, yalnızca kendilerine ve kullanıcılarına yönelik bağımlılık kaçırma saldırılarını önlemek için eski markaların veya satın alınan varlıkların havuzlarının kontrolünü elinde tutmayı düşünmelidir.