Geçtiğimiz hafta (2026/07/27 - 2026/08/02), toplamda yaklaşık 88 milyon dolar kayba tekabül eden şu 2 önemli güvenlik olayı öne çıktı.
| Tarih | Olay | Tür | Tahmini Kayıp |
|---|---|---|---|
| 2026/07/29 | LULA | İş Mantığı Hatası | ~578K$ |
| 2026/07/30 | COLDCARD | Hatalı Entropi Üretimi | ~1.370 BTC (~88M$)* |
* COLDCARD'ın kaybı doğrulama yöntemine göre değişmektedir: gösterilen ~1.370 BTC (~88M) kadar çıkmaktadır.
Seçim nedenleri
- LULA: Bir AMM çiftinin bakiyelerini hareket ettirebilen ve rezerv yeniden senkronizasyonunu zorlayabilen ayrıcalıklı bir token fonksiyonu, fiyat manipülasyonu yoluyla tekrarlanabilir bir likidite tahliye ilkesine dönüşüyor.
- COLDCARD: Cüzdan firmware'inde bir derleme ve entegrasyon hatası, seed üretimini fark edilmeden deterministik bir yazılım yedeğine yönlendirdi; bu da entropi garantilerini zayıflatarak seed kurtarmayı çevrimdışı bir arama işlemine dönüştürdü ve büyük ölçekli fon kaybına yol açtı.
Web3 için En İyi Güvenlik Denetçisi
Yayına almadan önce tasarımı, kodu ve iş mantığını doğrulayın
Haftanın Öne Çıkanı: COLDCARD
COLDCARD'ı bu haftanın öne çıkan olayı olarak seçtik çünkü bir cüzdan entropi hatası, dönemin en büyük kaybına neden oldu. Kök neden, bir yapılandırma makrosunun etkin olup olmadığını değil, var olup olmadığını kontrol eden bir derleme koruması olması; bu, fonksiyonel testlerin yakalayamayacağı türden sessiz bir entegrasyon hatasıdır ve ders, zincir üstü güvenliğin zincir dışı rasgeleliğe bağlı olduğu her sisteme uygulanabilir.
Bir Bitcoin donanım cüzdanı olan COLDCARD, 2021 yılında amaçlanan donanım rasgele sayı üretecinin (RNG) yerine deterministik bir yazılım kaynağı kullanarak cüzdan seed'leri üreten firmware yayınladı [1][2]. Bu kusur, 30 Temmuz'da başlayan zincir üzerindeki dalgalar halinde etkilenen cüzdanların temizlenmesine kadar, 2026'nın Temmuz ayı sonuna kadar büyük ölçekte istismar edilmedi: kamuya açık şekilde doğrulanan kayıplar toplam en az 1.370 BTC'ye (5 Ağustos'taki 64.099$ fiyatla ~88M$) ulaşıyor [3], özel olarak doğrulanan raporlar ise bu rakamın yaklaşık 1.596 BTC'ye kadar çıktığını belirtiyor [4]. Kök neden, seed üretimini amaçlanan donanım RNG'si yerine bir yazılım yedeğine yönlendiren bir derleme ve yapılandırma hatasıydı. Etkilenen cihazlar için bu durum, seed kurtarmayı kriptografik olarak imkansız bir problemden çevrimdışı bir aramaya dönüştürdü.
Arka Plan
COLDCARD bir Bitcoin donanım cüzdanıdır. Bir cüzdanın özel anahtarları ve adresleri, tek bir gizli değerden (seed'i) türetilir; bu nedenle herhangi bir kendi kendine saklama (self-custody) cüzdanının güvenliği, bu seed'in iki özelliğine bağlıdır: gizli kalması ve üretildiğinde tahmin edilemez olması. Donanım cüzdanları büyük ölçüde ilk özelliği korumak için var olur; bu olay ise ikinci özelliğin başarısız olmasıdır. BIP-39 seed ifadesi insan tarafından okunabilir olsa da, tahmin edilemezlik gerekliliğinin altındaki güvenlik özelliği hâlâ onu oluşturmak için kullanılan rasgele baytların entropisidir. Bu baytlar yeniden üretilebiliyorsa, seed de yeniden üretilebilir. Buradaki sezgi, kombinasyonu zar atarak belirlenen bir kasa örneğidir: zarlar hileli ise, kilit ne kadar güçlü olursa olsun, kasa önyargıyı bilen herkese açık kalır.
Bir cüzdan için "hileli zarlar", zayıf bir rasgele sayı üreteci anlamına gelir. Donanım cüzdanlarının, güvenli mikrodenetleyicilerindeki bir donanım gerçek rasgele sayı üretecinden (TRNG) seed entropisi elde etmesi beklenir, çünkü bir yazılım sözde rasgele üreteci (PRNG) deterministiktir: iç durumu ve çağrı geçmişi bilinirse, çıkışı tam olarak yeniden oynatılabilir. Üretecin çıkışları tahmin edilebilirse, adayları aralığı çıkarılabilir ve bir adres, xpub veya genel anahtar gibi kamuya açık cüzdan verileriyle eşleştirilebilir; bu da seed kurtarmayı kriptografik olarak imkansız bir problemden çevrimdışı bir aramaya çevirir.
COLDCARD'ın firmware'i iki ayrı RNG yüzeyi sunuyordu. MicroPython, cüzdanın kripto kütüphanesinin beklediği genel rng_get() sembolünü açığa çıkaran bir STM32 platform katmanı sunarken, COLDCARD ayrıca kendi kartına özel donanım RNG sarmalayıcısını da koruyordu. Her iki yüzey de donanım entropisi sağlamayı amaçlıyor ve cüzdanın kripto kütüphanesi, firmware derlendiğinde çözümlenen tek bir genel RNG sembolü aracılığıyla bunlardan birine ulaşıyor.
Açık Analizi
Kök neden, MICROPY_HW_ENABLE_RNG yapılandırma makrosu etrafındaki bir derleme ve entegrasyon hatasıydı. COLDCARD'ın üretim kart yapılandırması bu makroyu 0 olarak ayarladı, çünkü firmware, MicroPython'ın donanım RNG uygulaması yerine kendi kartına özel donanım RNG sarmalayıcısını kullanmayı amaçlıyordu. Ancak cüzdan üretim yolu ngu.random.bytes(32)'ye taşınmıştı ve kripto kütüphanesinin STM32 yolu, sonuçta MicroPython tarafından çözümlenen genel rng_get() sembolüne bağlıydı.
Problem zinciri şöyleydi:
generate_seed()
-> ngu.random.bytes(32)
-> libngu CHIP_TRNG_32()
-> rng_get()
-> MicroPython STM32 RNG modülü
-> MICROPY_HW_ENABLE_RNG == 0 olduğu için Yasmarang yazılım yedeği
Kart yapılandırması, MicroPython'ın donanım RNG dalını devre dışı bıraktı:
// We have our own version of this code.
#define MICROPY_HW_ENABLE_RNG (0)
Kripto kütüphanesi hâlâ makroyu bir donanım RNG'sinin yeterli kanıtı olarak görüyordu [5], çünkü rng_get()'i çağırmadan önce sadece makronun var olup olmadığını kontrol ediyordu:
extern uint32_t rng_get(void);
#define CHIP_TRNG_32() rng_get()
#ifndef MICROPY_HW_ENABLE_RNG
#error "get a HW TRNG plz"
#endif
Bu koruma, tehlikeli durumu gözden kaçırıyor: 0 olarak tanımlanan bir makro yine de tanımlıdır, dolayısıyla #ifndef kontrolü geçer ve derleme başarılı olur. MicroPython, RNG uygulamasını makronun varlığına göre değil değerine göre seçtiğinden, MICROPY_HW_ENABLE_RNG == 0, rng_get()'i COLDCARD'ın kartına özel sarmalayıcısı yerine yazılım yedeği dalına yönlendirdi [6]:
#if MICROPY_HW_ENABLE_RNG
// STM32 donanım RNG
#else
// Yasmarang yazılım yedeği
#endif
Sonuçlar cihaz jenerasyonuna göre farklılık göstermektedir. Mk2/Mk3 firmware v4.0.0-v4.1.9 için, Block'un analizi [7] ngu.random'a hiçbir kriptografik entropi eklenmediğini belirtiyor; bu nedenle yedek durum ve çağrı geçmişi bilindiğinde cüzdan üretimi deterministik hale gelebilir (Coinkite'ın tavsiye bildirimi [2], Mk2/Mk3 aralığını biraz daha dar bir şekilde v4.0.1-v4.1.9 olarak sınırlandırıyor). Mk4/Q/Mk5 için, güvenli eleman materyali hash'lendi ama ngu.random.reseed()'e sadece dört bayt geçirildi, bu da güvenli yeniden tohumlamayı tek bir 32-bit durum kelimesiyle sınırladı; bu, kullanıcıların beklediği cüzdan entropisinden çok daha az etkili bir arama alanıdır. Son 32 rasgele baytın hash'lenmesi sonucun entropisini artıramaz; sadece zaten sınırlı bir aday kümesini dönüştürür.
Saldırı Analizi
Bir akıllı sözleşme açığından farklı olarak, bu olayda izlenebilecek tek bir zincir üstü saldırı işlemi yoktur. Bu, çevrimdışı bir seed kurtarma problemi olup ardından zincir üzerinde temizlemeler gerçekleşti. Ön koşul, etkilenen kullanıcıların cüzdan seed'lerini açık olan ngu.random.bytes(32) yolu üzerinden üretmiş olmasıydı; bu nedenle seed materyalleri tam donanım entropisine değil, yeniden üretilebilir bir yazılım yedeği durumuna bağlıydı. Çıkarılan ikinci bir ön koşul, etkilenen cüzdanların sadece seed'den türetilebilir olmasıydı: güçlü, benzersiz bir BIP-39 parolası, PBKDF2 aracılığıyla RNG hatasının hiçbir zaman dokunmadığı bağımsız, kullanıcı tarafından sağlanan entropiyi karıştırır ve bu tür cüzdanları saf seed sayımının kapsamı dışına yerleştirir; temizleme dalgalarının ölçeği, etkilenen kullanıcıların çoğunun böyle bir parola belirlememiş olduğunu göstermektedir. Buradan itibaren kurtarma muhtemelen şu üç adımda ilerledi:
- Saldırgan, cihaz meta verileri, önyükleme zamanlaması, RTC/SysTick varsayımları ve olası RNG çağrı geçmişini kullanarak aday RNG durumlarını sınırladı veya sayarak listeledi.
- Her aday durum için, saldırgan aday cüzdan seed'lerini türetti ve bunları çevrimdışı olarak adresler, xpub'lar veya üretilmiş genel anahtarlar gibi kamuya açık cüzdan verileriyle karşılaştırdı.
- Bir aday gerçek bir cüzdanla eşleştiğinde, saldırgan seed'i kurtardı, özel anahtarları yeniden oluşturdu ve ilişkili BTC'yi temizledi.
Zincir üzerinde, hırsızlık 30 Temmuz'da başlayan bir adres temizleme dalgası olarak ortaya çıktı. Bağımsız zincir üzerinde sezgisel takip [3], 4.580 doğrulanmış adresten temizlenen ve toplam en az 1.370 BTC'ye (5 Ağustos'taki 64.099$ BTC fiyatı üzerinden yaklaşık 88M) yükseliyor.
Sonuç
COLDCARD olayı bir entropi üretim başarısızlığıydı: güvenlik açısından kritik seed üretim API'si, amaçlanan donanım RNG'si yerine sessizce deterministik bir yazılım PRNG yedeğine çözümlendi, çünkü bir derleme koruması bir yapılandırma makrosunun etkin olup olmadığını değil, var olup olmadığını kontrol ediyordu. Etkilenen cihazlar için bu, seed kurtarmayı kriptografik olarak imkansız bir problemden çevrimdışı bir aramaya dönüştürdü ve sonuç, birden fazla dalgada temizlenen 1.370 BTC'nin [3] üzerine çıktı (özel kanal hesaplamaları bu rakamı yaklaşık 1.596 ila 2.055 BTC olarak veriyor [4]).
Temel mühendislik hatası, yayınlanan firmware'in en güvenlik açısından kritik API'sinin gerçekten amaçlanan donanım RNG'sine ulaştığını hiçbir zaman kanıtlamamış olmasıdır. Üç uygulama bunu yakalayabilirdi: kriptografik entropi için derleme korumaları hem makronun varlığını hem de değerini kontrol etmelidir; entropi yedekleri, sessizce bir yazılım PRNG'siyle değiştirme yerine kapalı şekilde başarısız olmalıdır; ve son firmware görüntüsünün doğrulaması, sadece kodun derlenip derlenmediğini değil, sembol kökenini ve uçtan uca entropi akışını da kapsamalıdır. Etkilenen bir seed olduğu yerde düzeltilemez; fonları düzeltilmiş firmware üzerinde oluşturulmuş bir cüzdana taşınmalıdır ve güçlü, benzersiz bir parola, seed'i onarmadan anlık riski azaltır [2].
Başarısızlık modeli vurgulanmaya değer: bu türden rasgelelik hataları, üretilen her seed tek başına geçerli olduğu için fonksiyonel testlere görünmezdir. Kusur, herhangi bir tek çıkışta değil, onları üreten kaynaktadır: bu kaynak tahmin edilebilir ve yeniden üretilebilir olduğu için, seed'ler toplu olarak küçük, sayılabilir bir aralığa düşer. Zincir dışı anahtar üretim bileşenleri, birinci sınıf güvenlik incelemesini hak eder.
Kaynaklar
- [1] COLDCARD cüzdan boşaltmasını zayıf seed üretim rasgeleliğine bağlayan BlockSec Phalcon uyarısı
- [2] Coinkite, Entropi Sorununa Teknik Derinlemesine İnceleme
- [3] coldcardwatch.com, Coldcard Sweep Watch: zincir üstü boşaltılmış adres takibi ve metodolojisi
- [4] Galaxy Research, COLDCARD hack kaybı tahmini (mağdur raporları aracılığıyla doğrulanan ~1.596 BTC)
- [5] libngu, STM32 RNG yolu genel
rng_get()'e referans veriyor ve sadece#ifndef MICROPY_HW_ENABLE_RNGile koruma sağlıyor - [6] Coldcard MicroPython, donanım RNG devre dışı bırakıldığında
rng_get()Yasmarang'a geri düşer - [7] Block Engineering, COLDCARD Firmware'inde Tahmin Edilebilir RNG Yedeği ve 32-Bit Yeniden Tohumlama
Phalcon Explorer ile Başlayın
Akıllıca Hareket Etmek için İşlemlerin Derinliklerine Dalın
Şimdi ücretsiz deneyinBu Haftanın Diğer Olayları
LULA
BNB Chain üzerinde bir BEP-20 token'ı olan LULA, 29 Temmuz 2026'da token sözleşmesindeki bir iş mantığı hatası nedeniyle yaklaşık 578K$ kaybetti. Saldırgan tarafından erişilebilen bir yol, ayrıcalıklı recycle() fonksiyonunu tetikleyebiliyordu; bu da Rental sözleşmesinin LULA'yı doğrudan PancakeSwap V2 çiftinden aktarmasına ve ardından sync()'i çağırarak çiftin rezervlerini manipüle edilmiş bakiyelere güncellemesine olanak sağlıyordu. Saldırgan, çiftin LULA rezervini sıfıra yakın bir seviyeye küçültmek için recycle()'ı tekrar tekrar tetikledi, ardından küçük bir miktar LULA'yı geri değiştirip USDT'sinin neredeyse tamamını aldı [1].
Arka Plan
LULA, kiralama tabanlı bir ekip ödülü mekanizmasına sahip BNB Chain üzerindeki bir BEP-20 token'ıdır. Uygun adresler, bir Rental sözleşmesinde bekleyen ekip ödülleri biriktirir ve bunları claimTeamReward() aracılığıyla talep eder. Talep akışı sırasında, Rental sözleşmesi ödül dağıtımı için LULA elde etmek amacıyla token'ın recycle() fonksiyonunu çağırır. recycle() rasgele kullanıcılar tarafından çağrılamaz; onu yürütmeye yalnızca Rental sözleşmesi yetkilidir.
claimTeamReward() giriş noktası "sadece EOA" kontrolü içerir. msg.sender == tx.origin olduğunda dışarıdan sahip olunan hesaplardan doğrudan çağrıları destekler ve delege edilmiş kod önekini inceleyerek EIP-7702 delege edilmiş çağrıları da destekler.

Otomatik piyasa yapıcı (AMM) bir çift, değişimleri saklanan rezervlerinden fiyatlandırır ve bu rezervler, çiftin mevcut token bakiyelerine ayarlayan çiftin sync() fonksiyonu aracılığıyla güncellenir. Rezervler normalde değişimler ve likidite olaylarıyla hareket ettikleri için gerçek ticareti takip eder, ancak bir çiftin token bakiyesi doğrudan bir transfer ile de değiştirilebilir ve sync(), manipüle edilmiş olsun ya da olmasın, mevcut bakiyeyi saklanan rezervlere kopyalar.
Açık Analizi
Kök neden, LULA.recycle() fonksiyonunun Rental sözleşmesinin LULA'yı doğrudan PancakeSwap V2 çiftinden aktarmasına ve ardından sync()'i çağırarak çiftin rezervlerini manipüle edilmiş bakiyelere güncellemesine izin vermesiydi [1].

sync() rezervleri çiftte kalan her ne LULA bakiyesi varsa ona ayarladığından, bu ayrıcalıklı yol, USDT tarafına dokunmadan çiftin LULA rezervini keyfi olarak düşürebilir. LULA rezervi sıfıra yaklaştığında, çift küçük bir miktar LULA'yı USDT'sinin neredeyse tamamına değer olarak fiyatlandırır.
Saldırı Analizi
Aşağıdaki analiz 0xa219ab9...411d7c işlemine dayanmaktadır.
- Adım 1: Saldırgan, ~197.05M USDT biriktirerek manipülasyonu fonladı. Fonlar, Moolah/Lista, Aave V3, Venus, PancakeSwap V3, PancakeSwap Vault, Uniswap V4 PoolManager ve Uniswap V3 dahil olmak üzere birden fazla flash-kredi ve borçlanma kaynağından geldi.
- Adım 2: Saldırgan, ~197.05M USDT'yi PancakeSwap yönlendiricisi üzerinden büyük bir
USDT -> LULAdeğişimi gerçekleştirmek için kullandı. Bu, çiftin LULA rezervini ~8M LULA'dan 24.022 LULA'ya keskin şekilde düşürürken, USDT tarafını yaklaşık 197.64M USDT'ye yükseltti. - Adım 3: Saldırgan, birden fazla EIP-7702 cüzdanı aracılığıyla ödül yolunu tetikledi. Her cüzdan, Rental sözleşmesinde
claimTeamReward()'ı çağırdı, bu daLULA.recycle()'ı tetikleyerek çiftin hâlâ çok büyük bir USDT tarafına sahip olduğu 24.022 LULA'dan 0,004 LULA'ya düşen LULA rezervini küçültüyordu. - Adım 4: Saldırgan, yönlendirici üzerinden son bir PancakeSwap V2 değişimi gönderdi; çifte sadece ~4.749 LULA gönderip karşılığında ~197.64M USDT aldı.
- Adım 5: Saldırgan tüm flash-kredileri geri ödedi ve yaklaşık 578K$ kâr etti.
Sonuç
BNB Chain üzerindeki LULA token'ı, token sözleşmesindeki bir iş mantığı hatası nedeniyle yaklaşık 578K$ değerinde istismar edildi: saldırgan tarafından erişilebilen bir yol, ayrıcalıklı recycle() fonksiyonunu tetikleyebiliyordu; bu da Rental sözleşmesinin LULA'yı doğrudan PancakeSwap V2 çiftinden aktarmasına ve ardından sync()'i çağırarak çiftin rezervlerini manipüle edilmiş bakiyelere yeniden senkronize etmesine olanak sağlıyordu. Saldırgan, çiftin fiyatını çarpıtmak ve küçük bir miktar LULA'yı geri değiştirip USDT'sinin neredeyse tamamını almak için bunu tekrar tekrar tetikledi.
Bir token sözleşmesi, bir AMM çiftinin bakiyelerini hareket ettirebilen ve rezerv yeniden senkronizasyonunu zorlayabilen ayrıcalıklı bir yolu asla açığa çıkarmamalıdır, çünkü bunu yapmak, bu yola erişebilen herkese fiyat kontrolünü teslim eder. AMM çiftleriyle entegre olan token'lar, çiftin rezervlerini gerçek, piyasa tarafından yönlendirilen bakiye değişikliklerine bağlı tutmalıdır ve fiyatlandırma için havuz rezervlerini okuyan herhangi bir mantık, bunları yetkili olarak değil manipüle edilebilir olarak ele almalıdır.
Kaynaklar
BlockSec Hakkında
BlockSec, uçtan uca bir blok zinciri güvenliği ve kripto uyumluluk sağlayıcısıdır. Müşterilerin kod denetimi yapmasına (akıllı sözleşmeler, blok zinciri ve cüzdanlar dahil), saldırıları gerçek zamanlı olarak engellemesine, olayları analiz etmesine, yasa dışı fonları izlemesine ve protokollerin ve platformların tüm yaşam döngüsü boyunca AML/CFT yükümlülüklerini karşılamasına yardımcı olan ürünler ve hizmetler geliştiriyoruz.
BlockSec, saygın konferanslarda birden fazla blok zinciri güvenliği makalesi yayınladı, DeFi uygulamalarının çeşitli sıfır gün saldırılarını rapor etti, 20 milyon dolardan fazlasını kurtarmak için birden fazla saldırıyı engelledi ve milyarlarca dolarlık kripto para birimini güvence altına aldı.
-
Resmi web sitesi: https://blocksec.com/
-
Resmi Twitter hesabı: https://twitter.com/BlockSecTeam



