CryptoJS’in zayıf rastgeleliği milyonluk cüzdanları boşalttı

Anasayfa » CryptoJS’in zayıf rastgeleliği milyonluk cüzdanları boşalttı
CryptoJS’in zayıf rastgeleliği milyonluk cüzdanları boşalttı

Kripto cüzdan uygulamalarında kurtarma ifadeleri üretmek için kullanılan CryptoJS tabanlı bir rastgele sayı üreticisinin zayıf entropi sunması, iki ayrı boşaltma dalgasında en az 5,7 milyon dolarlık kayba bağlandı. Analizlere göre sorun, 2014’te JavaScript kriptografi kütüphanesine eklenen ve daha sonra tekrar geri çekilen bir kod yolundan kaynaklanıyor; etkilenen uygulamalar arasında RRWallet, Bexo Wallet, NanChat, Bitcoin Libre ve Milo yer alıyor.

Güvenlik araştırmacıları, kusurun yalnızca cüzdanlarda kullanılan kurtarma ifadelerini üreten akışı etkilediğini, uygulamanın yalnızca CryptoJS bağımlılığını taşımasının tek başına yeterli olmadığını vurguluyor. Buna karşın, zayıf üretimle oluşturulmuş bir ifade daha sonra donanım cüzdanına bile aktarılsa tahmin edilebilir kalıyor. Coinspect, bu nedenle etkilenen yolun yalnızca mobil uygulamalarla sınırlı olmadığını, aynı ifadenin donanım cüzdanında da riskli olabildiğini belirtiyor.

Boşaltma dalgaları Mayıs sonunda başladı

Blockchain güvenlik firması Coinspect, Mayıs sonundan itibaren iki ayrı operasyonla yürütülen saldırılarda ölçülebilen kaybın 5.690.922 dolara ulaştığını belirledi. İlk dalga 27 Mayıs’ta gerçekleşti ve 431 hesaptan yaklaşık 3,14 milyon dolar çıkarıldı. İkinci dalga ise 30 Mayıs ile 13 Temmuz arasında sürdü; bu süreçte 522 tohuma bağlı adreslerden 2,55 milyon dolar boşaltıldı.

Bu ikinci aşamanın içinde 4 Temmuz’da tek bir Tron hesabından yaklaşık 2,18 milyon USDT transferi de yer aldı. Coinspect’in daha sonra yaptığı zincir üstü inceleme, Bitcoin, Ethereum, Tron, Rootstock ve Polygon ağlarında 2.114 doğrulanmış tohum ve bunlara bağlı adresi takip etti. Firma, ortaya çıkan tutarın alt sınır olduğunu, gerçek kaybın bunun üzerinde olabileceğini söyledi. Coinspect’in ölçümünde yer alan 5.690.922 dolarlık rakam da 13 Temmuz’a kadar görülebilen kaybı temsil ediyor.

Coinspect, Temmuz ayında bu kampanyaya “Ill Bloom” adını vermişti. Kuruluş, saldırıların arkasındaki yöntemi o dönemde teknik ayrıntılara girmeden duyurmuş, şimdi ise beş ayrı uygulamanın aynı zayıf üreticiyi kurtarma ifadesi oluşturmak için kullandığını doğruladı. Şirket, The Hacker News’e bunların Temmuz ayında isimsiz biçimde atıfta bulunduğu aynı beş cüzdan olduğunu söyledi.

Etkilenen beş uygulama ve yamaların durumu

Doğrulanan uygulamalar arasında RRWallet ve Milo’nun artık geliştirilmediği, dolayısıyla yamasız kaldığı bildirildi. Bexo Wallet tarafında Coinspect, sorunun 20.1.0 sürümünde giderildiğini ancak güncellenmiş derlemelerin henüz mağazalara yüklenmediğini aktardı. NanChat bağımsız doğrulama ile 1.3.0 öncesi sürümlerin etkilendiğini kabul etti ve düzeltmeyi 1.3.0 ile yayımladı. Bitcoin Libre ise hatayı Temmuz 2024’te çıkan 4. sürümde kapattı.

Coinspect, Temmuz ayında ismini vermediği beş cüzdanın bunlar olduğunu The Hacker News’e doğruladı. Buna karşın firma, tüm kırılgan uygulamaları bulduğunu iddia etmediğini, mağazalardan veya eklenti pazarlarından kaldırılmış bazı mobil ya da tarayıcı cüzdanlarını inceleyemediğini söyledi. Bazı üreticilerin eski sürümleri erişim dışı bırakıp yalnızca yamalı derlemeleri yayında tuttuğu için kapsamın bundan daha geniş olması mümkün.

Şirket ayrıca, Temmuz ayında bahsettiği tarayıcı eklentisini geliştiren üreticinin kendisine, bu eklentinin kullanım ömrünün sona erdiğini ve hiç yaygınlaşmadığını söylediğini aktardı. Ancak Coinspect, kaldırılmış uygulamalara ya da pazar yerlerinden silinmiş sürümlere erişemediği için etkilenen tüm yazılımları listelediğini doğrulayamıyor.

Bexo cephesinde net sürüm durumu da tam olarak görünmüyor. Coinspect, 20.1.0 düzeltmesinin platforma özgü olmadığını söyledi ancak güncel derlemelerin henüz yüklenmediğini ekledi. 6 Ağustos tarihli mağaza kayıtlarında Apple App Store’da iPhone için hâlâ 18.3.5 sürümü görünüyordu; Google Play tarafında ise 20 Mayıs tarihli bir Android güncellemesi vardı ama kamuya açık sürüm numarası listelenmemişti. Bu iki kayıt da inceleme anında 20.1.0’ın yayında olduğunu doğrulamıyordu.

Coinspect’in The Hacker News’e verdiği bilgiye göre, halka açık duyuru RRWallet, Bexo, Bitcoin Libre ve Milo için tam etkilenen sürüm aralıklarını içermiyor. Şirket, yalnızca uygulamayı güncellemenin mevcut bir kurtarma ifadesini onarmadığını da vurguladı. Zayıf üretimle oluşmuş ifade nerede içe aktarılırsa aktarılsın, tahmin edilebilir olmaya devam ediyor.

NanChat’in duyurusunda, 1.3.0’dan önce cüzdan oluşturan kullanıcıların cüzdanı ele geçirilmiş kabul etmesi ve varlıkları yeni bir cüzdana taşıması gerektiği yazıyor. Sürüm 1.3.0, yeni bir tohum üretip fonları taşımaya yarayan bir araç içeriyor. Coinspect’in kurucusu ve CEO’su Juliano Rizzo, sorunu 10 Haziran’da bildirdi; yama iki gün sonra yayımlandı. NanChat’in kamu duyurusu da bu aktarım önerisini açıkça içeriyor.

CryptoJS’te eski bir kararın faturası

Açığın kökü, CryptoJS’in 12 yıl önce eklenen zayıf bir rastgele sayı üretim yoluna dayanıyor. 2014 Haziran’ında Math.random() ile tohumlanan Multiply-With-Carry üreticisi kütüphaneye girdi. 3.2.0 ve 3.2.1 sürümleri yerel kriptografik rastgeleliğe geçti, ancak 3.3.0’da bu değişiklik “breaking change” sayıldığı için zayıf kod geri getirildi. 3.x serisi içinde yapılan bir yükseltme, bir projeyi düzeltmeler sürümünden yeniden kırılgan sürüme taşıyabiliyordu. Kalıcı dönüş 4.0.0 ile, Şubat 2020’de geldi.

Coinspect, bu kod yolunun cüzdan yazılımına nasıl girdiğine örnek olarak ferrumnet/bip39 adlı React Native çatallanmasını gösterdi. Firma, bu çatalın upstream bip39 paketinin yerel kriptografik rastgeleliğini alıp CryptoJS ile değiştirdiğini, ancak bunun tek giriş yolu olmadığını belirtiyor. Yani sorun, doğrudan CryptoJS kullanan farklı entegrasyonlarda da ortaya çıkabiliyor. Coinspect’e göre ferrumnet/bip39, cüzdan yazılımına giren yollardan yalnızca biri.

CryptoJS bakımcısı Evan Vosberg, 5 Ağustos’ta GHSA-rg76-677x-56q9 uyarısını Critical derecesi ve 9.0 CVSS puanıyla yayımladı. Paket alanı 4.0.0 altındaki tüm sürümleri kapsıyor; ancak 3.2.0 ve 3.2.1 sürümleri bu geniş aralığın içinde istisna oluşturuyor çünkü o iki sürümde güvenli rastgelelik kullanılmıştı. Uyarı metni, 3.x serisindeki geri dönüşün güvenli sürümleri yeniden kırılgan hale getirdiğini de gösteriyor.

Uyarıda, bir uygulamanın ancak bu işlevi güvenlik açısından kritik değerler üretmek için kullanması halinde etkilendiği açıkça belirtiliyor. Yalnızca bağımlılığı taşımak yeterli değil; bu nedenle paket aralığı, fiilen istismar edilebilir uygulama kümesinden daha geniş. Bir kurtarma ifadesi bu işlevin çıktısından üretildikten sonra yapılan karma ya da PBKDF2 işlemleri eksik entropiyi geri getiremiyor. Sonradan yapılan paket güncellemesi de üretilmiş ifadeyi onaramıyor.

Coinspect, ayrıca saldırganların üretim yolunu tersine çevirmediklerini, çıkarılan çıktıların numaralandırılması, BIP39 ifadelerine çevrilmesi, adreslerin türetilmesi ve bunların kamu blokzinciri verileriyle karşılaştırılması yoluyla saldırı zincirini yeniden oluşturduğunu anlattı. Şirket, 128 ve 256 bit entropi üzerinden normalde 2^128 ve 2^256 büyüklüğünde arama uzayları beklenmesi gerekirken, kırılgan üreticinin bunu yaklaşık 2^39 ve 2^47 düzeyine indirdiğini bildirdi. Bu daralma, numaralandırmanın sıradan donanımda yapılabilecek kadar küçülmesine yol açtı.

Yayımlanan adres denetleyicisi ve sınırlı görünürlük

Coinspect, kullanıcıların yayınlanan adres denetleyicisini değerlendirebildiğini ancak aracın kurtarma ifadelerini ya da özel anahtarları kabul etmediğini hatırlattı. Adres eşleşmesi, aynı ifadeye bağlı varlıkların acil risk altında olabileceği anlamına geliyor. Negatif sonuç ise yalnızca o adresin şu an yayımlanan veri setinde yer almadığını gösteriyor. Coinspect’in kamuya açık denetleyicisi adresleri kabul ediyor, ifadeleri ya da özel anahtarları değil.

Şirketin kamuya açık verilerine göre etki, Ethereum Sanal Makinesi uyumlu ağlar ve Bitcoin genelinde binlerce kullanıcıya yayılıyor. Ancak uygulama bazında bir döküm paylaşılmadı. 6 Ağustos itibarıyla adı açıkça doğrulanan ve kamu uyarısı yayımlayan tek uygulama NanChat oldu. Coinspect, etkilenen nüfusun EVM uyumlu ağlar ve Bitcoin genelinde binleri bulduğunu, fakat cüzdan bazında dağılım vermediğini kaydetti.

Coinspect, teknik ayrıntıları iki ay boyunca gizlediğini, bu süre içinde üreticileri bilgilendirdiğini ve açıkta kalan adresleri aradığını da kaydetti. Böylece kampanyanın kullanılan üretim yolunu kamuya açıklamadan önce yayılımı haritalamaya çalıştı. Araştırmacıların ortaya koyduğu tabloya göre risk, eski bir kitaplık kararının yıllar sonra cüzdan altyapılarına sızmasıyla oluştu ve boşaltmalar doğrudan bu zayıf tohum üretimine bağlandı.