Açık kaynak projesi Moq (“Mock” olarak telaffuz edilir), tartışmalı bir bağımlılığı sessizce son sürümüne dahil ettiği için sert eleştiriler aldı.
NuGet yazılım kayıt defterinde dağıtılan Moq, herhangi bir günde 100.000’den fazla indirme görüyor ve ömrü boyunca 476 milyondan fazla indirildi.
Moq’un bu haftaki 4.20.0 sürümü, hareketi bir güven ihlaline benzeten açık kaynaklı yazılım tüketicileri arasında bir kargaşaya neden olan SponsorLink adlı başka bir projeyi sessizce içeriyordu.
Görünüşe göre açık kaynaklı bir proje olan SponsorLink, aslında NuGet’te kapalı kaynak olarak gönderiliyor ve kullanıcı e-posta adreslerinin karmalarını toplayan ve bunları SponsorLink’in CDN’sine göndererek gizlilik endişelerini artıran gizlenmiş DLL’ler içeriyor.
Moq kullanıcı güvenini kırar
Geçen hafta Moq’un sahiplerinden biri olan Daniel Cazzulino (kzuSponsorLink projesini de sürdüren), SponsorLink’i Adedi 4.20.0 ve sonraki sürümlerine ekledi.
Bu hareket, açık kaynak ekosisteminde büyük ölçüde iki nedenden dolayı şok dalgaları yarattı: Cazzulino projesinin Moq’unu değiştirme hakkına sahipken, bağımlılığı gruplandırmadan önce kullanıcı tabanını bilgilendirmedi ve SponsorLink DLL’leri gizlenmiş kod içeriyor, bu da bunu zorlaştırıyor tersine mühendislik yapmak ve tam olarak “açık kaynak” değil.
Almanya merkezli yazılım geliştiricisi Georg Dangl, Moq’un 4.20.0 sürümüne atıfta bulunarak “4.20 sürümünden itibaren SponsorLink dahil edilmiş gibi görünüyor” dedi.
“Bu, en azından yerel verileri (git config?) tarayan ve mevcut geliştiricinin karma e-postasını bir bulut hizmetine gönderen, gizlenmiş kod içeren bir DLL olarak sağlanan kapalı kaynaklı bir projedir.”
Dangl, tarama yeteneğinin oluşturma işlemi sırasında çalışan ve devre dışı bırakılması zor olan .NET analiz aracının bir parçası olduğu konusunda uyarıyor.
“Bunun arkasındaki mantığı anlayabiliyorum, ancak bu dürüst olmak gerekirse, gizlilik açısından oldukça korkutucu.”
SponsorLink, kendisini GitHub Sponsorlarını kitaplıklarınıza entegre etmenin bir yolu olarak tanımlar, böylece “kullanıcılar, özelliklerin kilidini açmak için sponsorluklarına düzgün bir şekilde bağlanabilir veya projenizi destekledikleri için hak ettikleri takdiri alabilirler.”
GitHub kullanıcısı Mike (d0pare), DLL’leri kaynak koda dönüştürdü ve kaynak kodun kabaca yeniden yapılanmasını paylaştı. Analiste göre kitaplık, “e-postanızı almak için harici bir git işlemi başlatır.”
Daha sonra e-posta adreslerinin bir SHA-256 karmasını hesaplar ve bunu SponsorLink’in CDN’sine gönderir: hxxps://cdn.devlooped[.]com/sponsor bağlantısı.
Austin merkezli geliştirici Travis Taylor, “Dürüst olmak gerekirse Microsoft, NuGet sağlayıcılarıyla çalışan bu paketi kara listeye almalıdır” diye yazıyor.
“Yazara güvenilemez. Bu, pek çok insan için tonlarca iş yaratan inanılmaz derecede aptalca bir hareketti.”
Geliştirici değişimi savunur
Bir yorumda Cazzulino, “4.20” versiyonunun “insanların onu bu kadar ciddiye almaması için bir yumruk” olduğunu kabul ederek nedenlerini açıkladı.
Cazzulino, “Bir süredir (duyurudan yaklaşık 6 ay önce) SponsorLink ile suları test ediyorum” diyor.
“Gerçek geri bildirim almak zor oldu, bu yüzden yorumlar biraz” sert olsa bile, gerçekten takdir ediyorum!”
Cazzulino, SponsorLink projesinin BENİOKU’sunu, aşağıda gösterilen ve hiçbir gerçek e-posta adresinin toplanmadığını, yalnızca hash’lerinin toplanmadığını açıklayan uzun bir “Gizlilik Hususları” bölümüyle daha da güncelledi. Güncelleme birkaç saat önce, tepkiler ortaya çıktıktan sonra geldi.
SponsorLink’in e-postanızı sizin açık izniniz olmadan toplamış olabileceğine dair bazı endişeler vardı. Bu yanlıştır ve ne tür bir trafik olduğunu görmek için Fiddler çalıştırılarak kolayca doğrulanabilir.
Spesifik olarak, sponsorluk kontrolü yapılırken gerçek e-posta asla gönderilmez. Yerel makinenizdeki e-posta SHA256 ile hashlenir, ardından Base62 ile kodlanır. Ortaya çıkan opak dize (kaynak e-postayı asla gösteremez) kullanılan tek şeydir.
SponsorLink’in e-posta adresinizi fiilen aldığı tek an (sponsorluğunuzu bağlamak için gerçek e-postanız ve GH kullanıcısıyla o opak dizenin arka uç ilişkisini gerçekleştirmek için), sonrasında SponsorLink GitHub uygulamasını yükler ve bunu yapması için açık izin verirsiniz.
Ayrıca, uygulamayı askıya aldığınız veya kaldırdığınız anda, hesabınızla ve e-postalarınızla ilişkili tüm kayıtları sileriz.
Sonatype kıdemli güvenlik araştırmacısı Ankita Lamba, güncellemeyi fark ettikten sonra BleepingComputer’a “Bildirim, projenin hangi verilerin toplandığı konusunda açık sözlü olmasından ziyade çevrimiçi tepkiye tepkisel bir yanıt gibi görünüyor.”
Geçmişte Cazzulino, SponsorLink’i bazı kontrollerinin atlanmasını önlemek için kapalı kaynak ve gizlenmiş tutma kararını da savundu. Onun sözleriyle, kitaplığın opak özellikleri “tasarım gereğidir”.
Potansiyel bir gizlilik endişesi
SponsorLink’in moq gibi projelere sessizce dahil edilmesi, etik ve yasal açıdan bir gizlilik meselesidir.
İlk olarak, belirsiz, kapalı bir kaynak bağımlılığının (SponsorLink) açık kaynak kanalları aracılığıyla dağıtılması ve yine Cazzulino tarafından oluşturulan ve milyonlarca kez indirilen GitInfo gibi popüler OSS projelerine dahil edilmesi sorunu geliyor.
E-posta adresi karmalarının toplanması da tamamen anonim olmayabilir.
En azından teorik olarak, SponsorLink’in geliştiricisi, toplanan hash’leri bir yere sızan e-posta adreslerinden oluşan bir veritabanıyla karşılaştırabilir ve kullanıcıları belirleyebilir.
Michał Rosenbaum, “Karma işleminizi daha çok belirsizliği nedeniyle bir menkul kıymet olarak görüyorum. Karma posta bile yalnızca izin alındıktan sonra gönderilmelidir” diyor.
Başka bir yazılım mühendisi olan Kevin Walter, “Şu anda ciddi endişelerin ortaya çıktığını söyleyebilirim. Kullanıcıların büyük çoğunluğu bu değişikliğin yapıldığından ve bir sorun yaşayacağından bile haberdar değil” diyor.
Walter, “Moq ile güven artık GDPR’de olduğu gibi bozuldu. Bu en hafif tabirle el altından yapılıyor. İyi adamlardan biri olun,” dedi Walter Cazzulino’yu muğlak SponsorLink paketi konusunda daha şeffaf olmaya çağırdı.
Tepki olarak, birkaç geliştirici ya Moq’u kullanmayı bırakmakla tehdit etti. [1, 2] alternatifler lehine ve SponsorLink çalıştıran tüm projeleri tespit edip engelleyecek araçlar oluşturmak.
Bazıları bir adım daha ileri giderek SponsorLink kullanan projeleri boykot edeceklerini ve hatta “SponsorLink”i kötü amaçlı yazılım olarak NuGet kayıt defterine bildireceklerini önerdi. [1, 2].
BleepingComputer, yayınlamadan önce yorum yapmak için SponsorLink’in yaratıcısı Cazzulino ile iletişime geçti.