Etkilenen sürümler < 0.6.2 ve >= 0.7.0 < 0.7.2 olarak açıklandı. Zincir operatörlerine bu iki sürümden birine veya daha sonrasına yükseltme yapmaları çağrısı yapıldı. Değişikliğin state-breaking olduğu ve koordineli bir ağ yükseltmesi gerektirdiği, hemen yükseltme yapamayan operatörlerin ise yönetişim oylamasıyla koordineli yükseltme denemek yerine zinciri durdurmaları gerektiği bildirildi.
Kritik Açık Nasıl Ortaya Çıktı ve Yama Süreci
Cosmos Labs'ın 28 Ağustos'ta yayımladığı post-mortem'e göre açık, 25 Nisan'da hata ödül programı üzerinden bildirildi. Ekip o dönemde açığı canlı ağlarda fon riski oluşturmuyor olarak değerlendirdi. Post-mortem'de yer alan ifadede, "18 ondalıklı ağlarda zafiyeti yeniden üretemedik ve hatalı bir şekilde yalnızca 18 ondalık olmayan ağları etkilediği sonucuna vardık" denildi.Ekip, 13 Ağustos itibarıyla ondalık yapılandırmasından bağımsız olarak tüm Cosmos EVM zincirlerinin etkilendiğini teyit etti. Buna rağmen düzeltme, şirketin normalde üretim zincirlerinde fon kaybına yol açmayan sorunlar için saklı tuttuğu kamuya açık sessiz yama süreciyle yönlendirildi. Cosmos Labs bu kararı post-mortem'de şöyle açıkladı: "Bu noktada, üretim ağlarında kullanıcı fonlarını tehdit ettiği bilinen bir zafiyet için ekip tipik olarak yamayı etkilenen ağlara özel olarak dağıtmak üzere güvenli kanalları kullanırdı. Yama zaten ana dalda herkese açık olarak mevcut olduğundan ve bilinen bir sömürü olmadığından, ekibin sessiz yama süreciyle devam etmenin güvenli olacağı sonucuna vardığı" belirtildi.
Şirketin 27 Temmuz'da son senkronizasyonu yapılan hata ödül politikasındaki ifadesi ise farklı bir yol öngörüyordu: "Bir sorun acil veya ağ genelinde bir risk oluşturduğunda, Cosmos Labs herhangi bir kamuya açıklama yapılmadan önce acil hafifletmeler, özel düzeltme dağıtımı veya koordineli yükseltmeler başlatacaktır."
EVM ile Cosmos SDK Arasındaki Bakiye Uyumsuzluğu Nasıl Sömürüldü
Açık, Ethereum Sanal Makinesi (EVM) durumu ile Cosmos SDK x/bank modülünü uzlaştıran kodda bulunuyor. EVM StateDB yalnızca bir hesabın harcanabilir bakiyesini izlerken, SDK durumundaki hakediş (vesting) hesapları hem harcanabilir hem de kilitli bakiye tutuyor. Hem x/staking hem de staking precompile'ı kilitli kısmın delege edilmesine izin veriyor.Bir hakediş hesabı harcanabilir bakiyesinden daha fazlasını delege ettiğinde, delegasyon sonrası geri yazma işlemi delege edilen tutarın tamamını daha küçük olan harcanabilir rakamdan çıkarıyor. Çıkarma işlemi kontrolsüz yapılıyor ve bakiye yaklaşık 2^256 değerine sarıyor. Uzlaştırma daha sonra pozitif farkta mint, negatif farkta burn işlemi yapıyor. Saldırgan sarılmış hesaptan sınırlı miktarı dışarı taşıyabiliyor veya bir kurban hesaba 2^256 eksi bakiyesi kadar gönderim yaparak uzlaştırmanın kurbanın gerçek varlıklarını yakmasını sağlayabiliyor.
0.6.x sürümlerini çalıştıran zincirler destekleyici SDK defterinde mint ve burn yaptığı için büyük bir mint arz taşmasına ve zincirin durmasına neden oluyor. 0.7.x sürümlerini çalıştıran zincirler ise bakiyeleri doğrudan x/bank'te belirliyor ve uint256'dan int256'ya dönüşümden sağ çıkan değişiklikleri kabul ediyor. Her iki yarım da net arz değişimi sıfır olacak şekilde tek bir işlem içinde çalışıyor ve önceden hesaplanmış bir adrese dağıtılan kontrattan geliyor; bu adres önce bir hakediş hesabına dönüştürülüyor. Sömürü için zincirin izinsiz hakediş hesabı oluşturulmasına izin vermesi gerekiyor.
Operatörlere Yönelik Acil Önlemler ve Yama Detayları
Cosmos EVM çalıştıran operatörlere yönelik danışma metninde şu adımlar sıralandı:- v0.6.2 veya v0.7.2 ya da daha sonrasına yükseltme yapılması ve değişikliğin state-breaking olması nedeniyle bunun koordineli ağ yükseltmesi olarak uygulanması.
- Bir anda yükseltme yapamayan zincirlerin blok üretimini durdurması, koordineli yönetişim oylamasıyla yükseltme yürütülmemesi.
- Yapılandırma ile tek başına hafifletme bulunmadığı, staking precompile'ının devre dışı bırakılmasının birincil tetik yolunu ortadan kaldırdığı ancak yamanın yerine geçmediği bilgisi.
- Ön koşulun kapatılması için ante handler'da MsgCreateVestingAccount, MsgCreatePermanentLockedAccount ve MsgCreatePeriodicVestingAccount mesajlarının reddedilmesi. Genesis'te tanımlı hakediş hesaplarının etkilenmediği belirtildi.
- Fork üzerinde canlı kod yolunun doğrulanması. Yalnızca dışa aktarılan yardımcı programı yamalayan bir cherry-pick'in, kopyalanmış dışa aktarılmayan bir kopyayı yerinde bırakabileceği ve tüm testlerin yine de geçebileceği uyarısı yapıldı.
- Danışma metninde yer almayan iki düzeltmenin uygulanması. Kilitli bakiye anlık görüntüsü ve modül hesabı koruması ayrı değişiklikler olarak tanımlandı; modül hesabı korumasının modül hesaplarını koşulsuz reddettiği ve bunun bir modül hesabından yapılan EVM çağrılarını bozduğu aktarıldı.
- Cosmos Labs'a güvenlik irtibat kişisi kaydı yapılması. Şirket, olay sırasında güvenlik kanallarına hiç kaydolmamış on bir Cosmos EVM dağıtımı tespit ettiğini açıkladı.
"Merge commit from fork" başlıklı 3524ebc commit'i ise bir modül hesabının bakiyesini ayarlama girişimini reddediyor. ZetaChain katkıcısı morde08, 21 Ağustos'ta yayımlanan üç düzeltmenin tamamını içeren portta, cherry-pick yamasının fork'un canlı yolunu yamasız bıraktığını, çünkü fork'un kopyalanmış dışa aktarılmayan yardımcıları taşıdığını ve yukarı akış değişikliğinin yalnızca dışa aktarılan yardımcıya dokunduğunu söyledi. Warden Protocol ise iki gün sonra farklı bir yol izleyerek hakediş hesabı oluşturmayı tamamen engelledi. Warden Protocol katkıcısı jlehtimaki commit mesajında, "Hakediş hesapları Warden'daki kilitli bakiyelerin tek kaynağı ve hiçbir şey kullanıcıların bunları oluşturabilmesine bağlı değil, bu nedenle bu yolu kaldırmak yeniden oluşturmanın doğru olmasına güvenmek yerine ön koşulu kapatıyor" ifadesini kullandı.
Sessiz Yama Tartışması ve Saldırıların Zaman Çizelgesi
Push Chain'in Cosmos EVM fork'undaki herkese açık bir pull request, zafiyeti ve sömürü yolunu 20 Ağustos'ta 07:16 UTC'de ayrıntılı biçimde açıkladı. Bu açıklama, sürümlerin yayımlanmasından sekiz saat on beş dakika sonraydı. MANTRA'ya yönelik ilk saldırı ise on bir saat elli dakika sonra, 19:06 UTC'de başladı.Cosmos Labs ilk özel bildirimini güvenli e-posta yoluyla 21 Ağustos'ta 03:36 UTC'de, MANTRA'nın sömürüldüğünü bildirmesinden yaklaşık iki saat sonra gönderdi. Şirket post-mortem'de, "Cosmos Labs son 13 ayda 37 zafiyet için yamaları sessizce yayımladı ve aşağı akış geliştiricileri herkese açık olarak sömürü yollarını tam olarak tanımlamadı" dedi.
v0.6.2 ve v0.7.2 sürüm notlarının her ikisi de sürümün önemli güvenlik düzeltmeleri içerdiğini ve mümkün olan en kısa sürede uygulanması gerektiğini belirtiyor, ancak her ikisi de güvenlik geri portunu değişiklik günlüklerinden çıkarıyor. The Hacker News, 29 Ağustos'ta hiçbir sürümün bu pull request'leri listemediğini teyit etti.
Altı Zincirde Milyonlarca Dolarlık Kayıp ve Ekosistem Genelinde Risk
Cosmos Labs, açığın altı zincirde kullanıldığını bildiğini açıkladı. Saldırganlar, 19 Ağustos fiyatlarına göre merkezi olmayan borsalarda yaklaşık 2,87 milyon ABD doları tutarında etkilenen varlığı sattı; bu rakamın etkilenen zincirler tarafından sağlandığı ve bağımsız olarak denetlenmediği belirtildi. Merkezi borsalarda satılan 2,85 milyon ABD doları tutarındaki kısım ise Cosmos Labs'ın kamuya açık hacim verilerine dayandırdığı bir tahmin olarak aktarıldı.Cosmos ekosistemi 115'ten fazla bilinen halka açık blok zincirini kapsıyor ve şirket, yazılımını çalıştıran ağların eksiksiz bir kaydına sahip olmadığını, aynı boşluğun Temmuz ayında aşağı akış satıcılarının paketlenmiş dosya sistemi açıklarını yamalamak zorunda kalmasına da yol açtığını belirtti. The Hacker News, ekibin tüm zincirlerin etkilendiğini teyit etmesinin ardından yamanın neden özel olarak dağıtılmadığına ilişkin yorum için Cosmos Labs'a ulaştığını ve gelecek yanıtla haberi güncelleyeceğini bildirdi.

Siber Güvenlik
Siber Güvenlik
Siber Güvenlik
Yorumlar (0)
Yorum yapmak için giriş yapmalısınız.