Eklenti ve Tema Geliştiricileri: SDK'mızın Güvenlik Zafiyetinden Öğrenebilecekleriniz Bu
Yayınlanan: 2019-03-02Bir güvenlik açığıyla uğraşmak zorunda olduğumuz için bu hafta ekibimiz için oldukça yoğun geçti. Güvenlik bizim için en önemli önceliktir ve bu, dört yıl içinde SDK'mızda bulunan ilk büyük güvenlik açığıdır. Ne yazık ki, herhangi bir yazılımda olduğu gibi - geliştiriciler de insandır, bu nedenle bağımsız geliştirici, 20 kişilik bir tema mağazası veya Google olun, hatalar olabilir. Bu makalenin amacı, her şeyden önce şeffaflık, aynı zamanda olayı nasıl ele aldığımız ve bundan neler öğrenebileceğiniz konusunda size fikir vermektir.
25 Şubat 2019 Pazartesi günü, yardımcı bir geliştiriciden WooCommerce deposunda bir GitHub sorununa rastlayan bir destek e-postası aldık. Sorun, sunucularında şüpheli etkinlik fark eden küçük bir barındırma şirketinin temsilcisi tarafından oluşturuldu. Temsilci, iki olası saldırıyı belirten ilgili etkinlik günlüklerini dahil etti ve bunlardan biri Freemius SDK'yı çalıştıran bir eklentiyi hedefliyordu.
Güvenliği çok ciddiye aldığımız için hemen kapsamlı bir araştırma yaptık ve güvenlik açığının gerçekten de SDK'mızda olduğunu doğruladık.
Güvenlik açığının ciddiyeti nedeniyle, hemen bir düzeltme üzerinde çalışmaya başladık. Yalnızca birkaç saat sonra yamalı bir etiket yayınladık ve savunmasız bir SDK sürümü kullanan tüm geliştiricilere, SDK'yı tüm ürünlerinde en kısa sürede güncellemeleri için bildirimde bulunduk. WooCommerce ekibinin bunu bilmesini sağlamak için orijinal GitHub sorununu da güncelledik (maruz kalmayı azaltmak için birkaç saat sonra kaldırdığımız GH sorunu).
Maruziyeti azaltmak ve herkese sabit sürüme güncelleme yapmaları için biraz "eksiklik" süresi vermek için geliştiricilere iki şey sorduk:
(a) Bu güvenlik yükseltmesi değişiklik günlüğünüze eklenecekse, lütfen yalnızca "Güvenlik düzeltmesi" gibi genel ifadeler kullanın.
(b) Yamalı sürümleri güncelledikten ve yayınladıktan sonra bile, lütfen önümüzdeki 30 gün içinde bu sorunu ifşa etmeyin ve tüm ortaklarımıza ve kullanıcılarına güncelleme için yeterli zaman tanıyın.
Sadece bir gün sonra, eklenti güvenlik açıklarını kapsayan bir web sitesi (kasıtlı olarak bunlarla bağlantı kurmadan veya adlarından bahsetmeden), etkilenen eklentilerden birkaçını adlandırırken bu güvenlik açığından nasıl yararlanılacağına ilişkin bilgiler de dahil olmak üzere güvenlik açığı hakkında bir gönderi yayınladı. Eklenti ve tema geliştiricilerini sorun hakkında 24 saatten kısa bir süre önce bilgilendirdiğimiz için bu bizi şaşırttı. Bizimle iletişime geçmediler ve oldukça sorumsuz ve etik dışı bulduğumuz Sorumlu İfşaat piyasası uygulamasını takip etmediler.
Riski azaltmak ve geliştiricilerimize ve kullanıcılarına, daha fazla bilgisayar korsanının istenmeyen ilgisini çekmeden önce yamalı sürümlere güncelleme şansı vermek için raporu geçici olarak yayından kaldırmalarını istedim. Ama iletişim kurduğum, adını asla ifşa etmeyen (kendilerine sordum) kişinin kendi haklı ideolojisi var ve sağduyu gibi görünüyor, onlara pek çekici gelmiyor. Sorunlu durumu ve birçok geliştiriciye ve kullanıcıya maruz kaldıkları artan riski açıklamaya çalıştım, ancak çabalarım kulak ardı edildi ve e-posta alışverişimin sadece zaman kaybı olduğunu fark ettim.
Geliştirici topluluğumuz, eklentilerini ve temalarını yayınladığımız yeni yamalı SDK'ya güncellerken iki sorun keşfettik:
- Birkaç geliştirici, kontrol etmedikleri bir e-posta adresiyle Freemius'a kaydoldukları için uyarı e-postamızı alamadılar.
- Dikkat çekmemek için yamalı GitHub etiketini kasıtlı olarak resmi bir sürüm olarak işaretlemedik. Bununla birlikte, kitaplıklarını güncellemek için Composer kullanan geliştiricilerin, açıkça bir etiket belirtmedikçe packgist yalnızca yayınları getirdiği için en son güncellemeyi alamadıklarını öğrendik.
Bu sorunları aşmak için:
- Güvenlik açığı zaten herkese açık olarak yayınlandığından, iki gün önce yamalı sürümü resmi sürüm olarak işaretledik, böylece packgist'e güvenen geliştiriciler güncelleme yapabilir.
- Bu sabah erken saatlerde, tüm ürünlerinde henüz SDK'yı güncellememiş olan geliştiricilere başka bir toplu mesaj gönderdik. Bu sefer, herkesin e-postaları düzgün bir şekilde alma şansını artırmak için mesajları resmi destek kanallarına gönderdik.
Bu güvenlik açığının yayınlanmasını en az iki hafta ertelemek istememize rağmen, WP Tavern'den konuyla ilgili kendi makalelerini yayınlamadan önce, geliştiricinin klavyesini kıran pipet gibi girdilerimizi soran bir soruşturma daha aldık.
Yaptığımız Hatalar ve Onlardan Öğrenebilecekleriniz
Olaya dönüp baktığımızda, kolayca kaçınabileceğimiz ve herkesin hayatını çok daha kolaylaştıracak birkaç hata yaptık.
Sessiz moda geçin ve sadece bilmesi gerekenleri uyarın
Sorunu bir an önce çözmeye çok hevesli olduğumuz için, kişisel olarak çok erken istenmeyen dikkatleri üzerine çeken bir "çaylak" hatası yaptım. Devam ettim ve düzeltmeyi SDK'yı yönetmek için kullandığımız GitHub deposuna adadım. Depo sadece halka açık değil, aynı zamanda düzeltmeyi açıkladım ve içinde “güvenlik” kelimesini kullandım.
Daha iyi yaklaşım, havuzun özel/kapalı bir sürümünü oluşturmak, oradaki güvenlik sorununu yamalamak ve onu herkese açık hale getirmek yerine yalnızca ilgili geliştiricilere göstermekti. Bu, “güvenlik açığı avcılarının” dikkatini çekmez.
Enerjinizi “güvenlik trolleri” için boşa harcamayın
İkinci hata, güvenlik açığını yayınlayan sitenin arkasındaki şirketle etkileşim kurmaya çalışmaktı. Tamamen zaman ve enerji kaybıydı ve yalnızca daha fazla düşmanlığı tetikledi ve bu da güvenlik açığı hakkında başka bir yazıyla sonuçlandı. Eklenti veya tema kullanıcılarınızı riske atan bir gönderinin yazarıyla iletişim kurmanın zaman ayırmaya değer olup olmadığına karar vermek için iyi bir göstergenin, gönderinin/web sitesinin/şirketin arkasında bir isim olup olmadığıdır. Vekillerin arkasına saklanıyorlarsa ve mantıksız davranıyorlarsa, onlarla mantıklı konuşma şansınız neredeyse sıfırdır.
Bu yüzden benim tavsiyem - sessiz moda geçin ve yalnızca güvenlik açığı hakkında bilmesi gereken kişileri bilgilendirin. Bir eklenti/tema durumunda, bu sizin kullanıcılarınızdır. Bu, kullanıcılarınızın e-postalarını toplamanın önemini vurgulamak için de iyi bir fırsattır. Kullanıcılarınızla özel olarak iletişim kurmanın bir yolu yoksa, onları güvenlik sorunları hakkında özel olarak bilgilendirmenin etkili bir yolunuz yoktur.
Olayın Mevcut Durumu
SDK'mızı kullanan geliştiricilerin %60'ından fazlası yamalı sürüme yükseltti. Ek olarak, SDK, aynı WordPress web sitesinde yüklü olan birden fazla Freemius destekli eklentinin veya temanın, ürünlerden biri zaten güncellenmişse SDK'nın en yeni sürümünü kullanmasına izin veren özel bir mekanizma ile birlikte gelir. Bu iyi.
Bununla birlikte, hala savunmasız olan birçok site var. Bu yüzden güvenlik açığının kendisi veya etkilenen ürünler hakkında herhangi bir teknik ayrıntıdan bahsetmedim. Yine de geliştiricilerimize ürünlerine yama yapma ve kullanıcılarının güvenli sürümlere güncelleme yapma şansı sunmak istiyoruz.
WordPress Eklentinizdeki/Temanızdaki Güvenlik Risklerini Nasıl Azaltabilirsiniz?
Herhangi bir güvenlik geçmişiniz yoksa, Google'ın “en iyi web güvenliği uygulamaları” ve tonlarca makale ve uygulama bulacaksınız. Modern ve tipik potansiyel riskler ve hatalardan haberdar olmak için bunlardan birkaçını okuyun. Geliştirme ve test süreçleri sırasında bunları aklınızda bulundurun. Bir başka iyi uygulama, bir güvenlik araştırmacısı tutarak periyodik güvenlik denetimleri yapmaktır. Birkaç yüz dolara mal olacak, ancak ana gelir kaynağınız olarak ürününüze güveniyorsanız, daha akıllıca olmaz.
Ne yazık ki, bizim durumumuzda olduğu gibi, yine de kötü şeyler olabilir. Çok güçlü bir güvenlik geçmişine sahip olmamıza rağmen, kapsamlı kod incelemeleri yürütüyor ve HackerOne topluluğundan deneyimli bir güvenlik araştırmacısıyla çalışıyoruz, ancak bu güvenlik açığı hala çatlaklardan sızdı. 😔
Bunun olmasının nedenlerinden birinin, güvenlik açığı bulunan kodun aslında uç durumlarda hata ayıklamak için eklenmesi ve SDK'nın temel işlevselliğinin bir parçası olmaması olduğunu düşünüyorum. Dolayısıyla burada bir ders varsa, ürününüzdeki herhangi bir kod parçasına, ister gerçek iş mantığının bir parçası isterse başka bir şey olsun, aynı şekilde davranın.
Özet
Yazılım dünyasında güvenlik sorunları kaçınılmazdır. Beğenseniz de beğenmeseniz de, bir gün eklentiniz veya temanız bir güvenlik sorunu yaşayacaktır. Sorun kodunuzda, kullandığınız bir kitaplıkta/çerçevede, beklenmeyen sonuçlar sağlayan bir WordPress çekirdek yönteminde ve daha birçok senaryoda olabilir.
Olduğunda (umarım olmaz), stres yapmayın (kesinlikle yaptık) ve dürtüsel hareket edin - sadece daha fazla zarar verir. Metodolojik bir kurtarma planı taslağı hazırlayın, etkilenen tarafları bilgilendirin ve kullanıcılarınızın sitelerinin güvenliğini sağlamalarına yardımcı olmak için orada olun. Güvenlik sorunlarının meydana geldiğini herkes bilir, daha önemli olan durumla nasıl başa çıktığınızdır.
Bununla birlikte, tüm Freemius ekibi adına, verdiğimiz rahatsızlıktan dolayı gerçekten üzgünüz ve bu sorunla ilgili destek, tavsiye veya başka herhangi bir yardım sunmak için tüm hafta sonu boyunca burada olacağız. Ve yeni kullanıcılarımız için ilk izlenimin ne kadar önemli olduğunu biliyorum ve bu kesinlikle iyi bir izlenim değil. Umarım Freemius'a bir şans daha verirsiniz ve zamanla WordPress eklentileriniz ve temalarınız için sunduğumuz harika özellikleri görürsünüz.