← Tüm yazılar

Modülü bir yabancı nişanladı

Bir Gnosis Safe, restake edilmiş ETH cinsinden 7,8 milyon dolar kaybetti — Safe bozuk olduğu için değil, etkin bir modülün, gelişigüzel bir keeper'ın onu saldırganın kendi havuzuna nişanlamasına izin verdiği için. Sınıf eski. Ders, bir hedefin nereden gelmesine izin verdiğinde.

Güvenlik5 dk okumaDeFiLoops

15 Eylül 2026’da bir Ethereum kullanıcısı, çok imzalı bir cüzdandan restake edilmiş ETH cinsinden yaklaşık 7,8 milyon dolar kaybetti. Akılda kalıcı bir sürpriz var —bir front-running botu parayı saldırganın kendisinden önce aldı— ama sürpriz ders değil. Ders, ondan önceki dört saniye: cüzdanın, kendisine hiçbir şey söyleyememesi gereken biri tarafından söylenen şeyi tam olarak yaptığı an.

Saldırının biçimi şöyle, çünkü bu bir akıllı hesabı boşaltmanın en yaygın yollarından biri ve kusurlu kısım her zaman doğru görünür.

Aslında ne oldu

Kurban, bir Gnosis Safe içinde, Aave ile sarmalanmış hâliyle yaklaşık 2.900 rsETH —bir likit restaking token’ı— tutuyordu. Saldırganın hiçbir zaman bir anahtarı olmadı.

Bunun yerine, hesabın etkinleştirdiği bir Uniswap V4 likidite modülünü —saldırganın az önce oluşturduğu bir havuza— nişanlamak için bir halka açık keeper çağrısı kullandı. O havuz kötü niyetli bir hook taşıyordu. Hook, pozisyonu serbestçe transfer edilebilir rsETH’e açtı ve modül, Safe’in yetkisiyle hareket ederek onu taşıdı.

Kusur, hedefin nereden geldiğinde

Restaking’i ve hook’ları çıkarın, geriye tek bir madde kalır. Güvenilir bir modüle, çağıranı tarafından bir hedef —hangi havuz, hangi sözleşme— verildi ve modül bu hedefe kendi ayrıcalıklı bağlamının içinden hareket etti. Yaptığı doğrulama yetmiyordu, çünkü saldırgan paranın nereye gideceğine karar veren tek şeyi seçebiliyordu.

Before

Yönlendirilecek havuz. Çağrı anında, herkesin çağırabileceği halka açık bir keeper tarafından seçilen bir sözleşme adresi.

After

Bir hedefe karar veren hiçbir şey. Mekân, sahibin kurduğu bir listeden adlandırılır; alıcı her zaman hesaptır; çağrıyı modül oluşturur.

Hedefini çağıranından alan bir modül, çağıranın onu doğru nişanlayacağına güvenen bir modüldür. Halka açık bir keeper yolunda ise çağıran halktır. Saldırgan zorla girmedi. Direksiyon eline verildi ve kibar olması rica edildi.

Sürpriz, güzel olduğu için

Exploit işlemi halka açık mempool’a —onaylanmamış işlemlerin açıkta beklediği bekleme odasına— girdi. Yoink adında genelleştirilmiş bir front-running botu bekleyen boşaltmayı gördü, daha yüksek bir ücretle kopyaladı ve aynı blokta önce çalıştırdı. Asıl saldırgan hiçbir şey alamadı.

Bu bir DeFiLoops hesabında olabilir mi?

Bizim yerimizdeki bir okuyucunun gerçekten sorduğu soru bu, o yüzden dürüst cevap şu: belirli hamle —güvenilir bir modülü bir saldırganın sözleşmesine nişanlamak— bir DeFiLoops hesabına karşı ifade edilemez; şansla değil, tasarımla. Kontrollerimiz daha özenli olduğu için değil. Çünkü ajana nişanlayacağı bir hedef hiçbir zaman verilmez.

Saldırganın girdilerinin gidecek yerinin olmadığı yer
Yönlendirilecek havuzu / sözleşmeyi seçmek
Öyle bir alan yok. Ajan tipli parametreler verir; adaptör çağrıyı oluşturur ve hedefi seçer.
Bir mekânı adresle adlandırmak
Reddedilir. Mekânlar sahibin kurduğu kümeden adlandırılır, asla talimattaki bir adres olarak değil.
Ödemeyi kendine yönlendirmek
Alıcı hesaba zorlanır, hesaptan okunur — asla talimattan alınmaz.
Bu hesabı kastettiğini kanıtlamak
Sahip hesaptan okunur. Ajanın geçerli bir imzası, doğru hesabın ya da doğru hedefin kastedildiğinin kanıtı değildir.

Daha derin neden bir seviye yukarıda. Üretimdeki bir DeFiLoops hesabı ajana hiçbir doğrudan çağrı yolu vermez. Boşaltılan Safe’in, çağıran tarafından seçilen bir çağrıyı çalıştırabilen bir modülü vardı. Bizim ajanımız bir çağrı oluşturamaz. Bir miktar, listeden adlandırılmış bir mekân, bir aralık verir — ve beyaz listedeki bir adaptör işlemi kurar. Sağlanan bir sözleşme yoktur, çünkü ajan hiçbir zaman bir tane sağlamaz.

0 $
saldırganın seçtiği bir hedefin taşıyabileceği
0
üretimde ajan için doğrudan çağrı yolu
1
ajanı tamamen iptal etmek için işlem

Saldırganın planı, adım adım

Sahip anahtarını çalmak dışındaki en güçlü gerçekçi saldırganı varsayın: elinde ajan anahtarı var, yani hesabın günlük talimatlarını imzalayan anahtar. Deneyeceği şey ve her adımın nerede bittiği şöyle.

  1. Bir modülü kontrol ettiğin bir havuza nişanla

    Çağıranından havuz alan bir modül yok. Ticaret, mekânı sahibin kurduğu kümeden okuyan adaptörlerden geçer. Saldırganın oluşturduğu bir havuz o kümede değildir ve talimattaki bir adres keyfî bir çağrı olarak reddedilir.

  2. Doğrudan bir çağrıya geri dön ve kendi hedefini seç

    Üretimde geri dönülecek bir doğrudan çağrı yolu yok. Kurulu değil. Hamlenin yazılacağı bir yer yok.

  3. Meşru bir adaptörden geç ve fonları yönlendir

    Alıcı hesaba zorlanır, sahip hesaptan okunur, mekân sahibin kümesinden gelir ve harcama dönem başına sınırlıdır. Her hedefi talimat değil, adaptör belirler.

  4. Kendi modülünü kur ya da hesabın kökünü değiştir

    O seçiciler reddedilir. Ajan, Safe’i boşaltan türden yeniden yönlendirilebilir bir modülü asla kuramaz, sahip olamaz ya da hesabı devredemez.

  5. Bu sırada sahip ajanı iptal eder

    Kimsenin iş birliğini gerektirmeyen tek bir işlem; ve o anahtardan gelen her gelecekteki talimat, hedefi incelenmeden önce reddedilir. Çalınan anahtar, sahip harekete geçtiği an ölür.

Çalınmış bir ajan anahtarı, üretimdeki bir hesaba karşı, hiçbir şeyi bir saldırgana nişanlayamaz ve kontrolü ele geçiremez. Güvenlik iddiasının tamamı bu ve tam da bu saldırıya karşı geçerli.

Neyi iddia etmiyoruz

Orada biten bir güvenlik yazısı bir şey satıyordur. Dürüst sınırın üç kenarı var ve hiçbiri bu saldırı değil.

Kendi güvenimizi değiştiren kısım

Guard’ın bunu engellediğini kanıtlamaya koyulduk. O kanıtı yazmak, hâlihazırda sahip olduğumuz testlerin bunu kanıtlamadığını ortaya çıkardı — bir katman erken, hesabın tesisatında revert ediyorlardı ve test çatısı yanlış revert’i gevşek eşleştirdiği için geçiyorlardı. Koruma gerçekti. Ona dair kanıt ise tiyatroydu.

Koruduğu şeyi kırdığında başarısız olamayan bir güvenlik testi zayıf bir test değildir. Bir süstür ve hiç test olmamasından daha tehlikelidir, çünkü kapsam gibi okunur.

Bu yüzden kanıtı doğrudan guard’a karşı yeniden kurduk, her çağrının reddedilmesinin tam nedenini iddia ederek; sonra her kontrolü kasten kırıp ilgili testin başarısız olmasını izledik. Öz-referans satırını kaldırmak kendi testini düşürüyor. İptal yolunu etkisizleştirmek bir başkasını düşürüyor. Bir sınırın tuttuğuna inanmak ile bunu bilmek arasındaki fark budur.

Böyle bir iddiayı nasıl değerlendirmeli

Bu sayfaya güvenmek zorunda değilsin. Gerçek bir sınırı bir filtreden ayıran soru her zamanki soru: ajan, ya da geçmekte olan bir keeper, neyi yazabilir?

Cevap bir hedef içeriyorsa —bir havuz, bir sözleşme, çağıranın seçtiği bir adres— o zaman etrafındaki her koruma, bir yabancının seçtiği hedef ile paranın arasında duran bir kontroldür ve kontroller, birilerinin daha önce hayal ettiği saldırılara karşı yargılanır. Eylül boşaltması, çağıranın seçtiği bir hedefin bedelidir.

Cevap tipli parametreler ve başka hiçbir şey ise, bu yazıdaki saldırının ineceği bir yer yoktur, çünkü sömürdüğü şey —adlandırabileceğin bir hedef— hiçbir zaman verilmemiştir.


Kaynaklar: PeckShieldAlert ve Blockaid izleme raporları (15 Eylül 2026), PANews, Odaily, Foresight News ve BlockBeats tarafından aktarıldı; zincir üstü işlemler Etherscan üzerinden. Rakamlar ve mekanizma o an raporlandığı şekildedir ve analiz ilerledikçe revize edilebilir.