RubyGems.org'da paketleri değiştirmeye izin veren bir güvenlik açığı keşfettiler

Son zamanlarda RubyGems.org paket deposunda kritik bir güvenlik açığı tespit edildiği duyuruldu (bu güvenlik açığı zaten CVE-2022-29176 altında kataloglanmıştır). Bu açık , yetkilendirme olmaksızın, meşru bir paketin geri çekilmesi (yank) işlemi başlatılarak ve yerine aynı isim ve sürüm numarasına sahip başka bir dosya yüklenerek, depodaki diğer kişilerin paketlerinin değiştirilmesine olanak tanıyor.

Söz konusu güvenlik açığının, tireden sonraki kısmı platform adı olarak ele alan "yank" eylem işleyicisindeki bir hatadan kaynaklandığı ve bu durumun , adındaki tireden önceki kısma kadar olan bölümle eşleşen harici paketlerin kaldırılmasını mümkün kıldığı belirtiliyor.

Özellikle, "yank" işlemi işleyicisinin kodunda , paketleri aramak için 'find_by!(full_name: "#{rubygem.name}-#{slug}")' çağrısı kullanıldı ve "slug" parametresi, kaldırılacak sürümü belirlemek için paket sahibine iletildi.

"Rails-html" paketinin sahibi "1.2.3" sürümü yerine "sanitizer-1.2.3" belirtebilirdi, bu da işlemin "Rails-html-sanitizer-1.2.3" için geçerli olmasına neden olur. paket ″ başka birinden. »

Rubygems.org için bir güvenlik tavsiyesi dün yayınlandı.

Danışmanlık, kötü niyetli bir kullanıcının belirli değerli taşları çıkarmasına ve aynı ada, sürüm numarasına ve farklı platforma sahip farklı dosyalar yüklemesine izin veren bir hatayla ilgiliydi.

Çıkarma sürecinden geçerken neyin yanlış gittiğini görmek için daha derin bir göz atalım. Bir bahane olarak, yaygın olarak kullanılan "rails-html-sanitizer" gem'ine yetkisiz erişim sağlamak amacıyla "Rails-html" adlı bir gem oluşturduğumuz bir senaryo düşünelim.

Bu güvenlik açığından başarılı bir şekilde yararlanabilmek için üç koşulun yerine getirilmesi gerektiği belirtiliyor :

  • Saldırı sadece adında tire karakteri olan paketler üzerinde gerçekleştirilebilir.
  • Saldırgan, adın bir kısmı kısa çizgi karakterine kadar olan bir mücevher paketi yerleştirebilmelidir. Örneğin, saldırı "Rails-html-sanitizer" paketine yönelikse, saldırganın depoya kendi "Rails-html" paketini koyması gerekir.
  • Saldırıya uğrayan paket son 30 gün içinde oluşturulmuş veya 100 gün boyunca güncellenmemiş olmalıdır.

Sorun, HackerOne'ın tanınmış açık kaynaklı projelerdeki güvenlik açıklarını bulmayı amaçlayan ödül programı kapsamında bir güvenlik araştırmacısı tarafından tespit edildi .

Sorun 5 Mayıs'ta RubyGems.org'da düzeltildi ve geliştiricilere göre, son 18 ay içinde kayıtlarda güvenlik açığının istismar edildiğine dair herhangi bir iz tespit edilmedi . Bununla birlikte, şimdiye kadar yalnızca yüzeysel bir inceleme yapıldı ve gelecekte daha kapsamlı bir inceleme planlanıyor.

Şu anda, bu güvenlik açığından yararlanılmadığına inanıyoruz.

RubyGems.org, bir mücevher sürümü yayınlandığında veya kaldırıldığında tüm mücevher sahiplerine bir e-posta gönderir. Mücevher sahiplerinden, mücevherlerinin izinsiz çıkarıldığını belirten herhangi bir destek e-postası almadık.

Son 18 aydaki mücevher değişikliklerinin denetimi, bu güvenlik açığının kötü niyetli kullanımına ilişkin hiçbir örnek bulamadı. Bu istismarın herhangi bir olası kullanımı için daha fazla denetim, RubyGems tarihinde yetkisiz bir şekilde bir mücevheri devralmak için bu istismarın hiçbir örneğini bulamadı. Bunun asla olmayacağını garanti edemeyiz, ancak olası görünmüyor.

Projelerinizi doğrulamak için, Gemfile.lock dosyasındaki işlemlerin geçmişini analiz etmeniz önerilir. Kötü amaçlı etkinlik, aynı ad ve sürüme sahip değişiklikler veya bir platform değişikliği (örneğin, bir .1.2.3, xxx-1.2.3-xxx olarak güncellendi).

Sürekli entegrasyon sistemlerinde veya proje yayınlanırken gizli paketlerin taklit edilmesine karşı bir çözüm olarak , geliştiricilerin bağımlılıkları doğrulamak için Bundler'ı "--frozen" veya "--deployment" seçenekleriyle kullanmaları önerilir .

Son olarak, bu konu hakkında daha fazla bilgi edinmek isterseniz , ayrıntıları aşağıdaki bağlantıda bulabilirsiniz.


Google'da tercih edilen kaynak olarak ekleyin.