Bu 200 ETH, sözleşmenin Mart 2020'deki «Kara Perşembe» tasfiyeleri sırasında sıfır teklifle kazandığı ancak hiçbir zaman nihai olarak talep etmediği dört adet 50 ETH'lik partiden oluşuyordu.
Eski sözleşmenin korumasız fonksiyonlarından biri, kendisini kimin çağırdığını kontrol etmiyordu. Bu durum, saldırganın kontrolündeki bir sözleşmeye, bu sözleşmenin MakerDAO sistemindeki hesabı üzerinde tam kontrol vermesine olanak sağladı. Saldırgan, tek bir işlemde eski müzayedeleri sonuçlandırdı ve orada tutulan teminatı çekti.
Önemli işlemler (saatler UTC)
| Saat | TXID | Açıklama |
|---|---|---|
| 2026-10-06 05:57:23 | 0xd4c0b18a058e7f0a12855f30174f4cb1e973c15c886063deab97e1a21f048ac6 | Tornado Cash'ten 0.1 ETH çekimi. Bu, bu hesabın aldığı tek fonlamaydı. |
| 2026-10-06 06:12:11 | 0x4a587af4213cc345c4c109fbf5fec46f9643183f91a9edf60305380f31ad1167 | Güvenlik açığını istismar etmek için kullanılan saldırı sözleşmesinin devreye alınması. |
| 2026-10-06 06:13:11 | 0xbb6940f7c2a1e68cafbae7bb9b94d09af9af06ec3a114f6996f2cab993f3a88c | Saldırı işlemi. Saldırı sözleşmesi, keeper fonksiyonu 0x8804d1de aracılığıyla devredilmiş izinler elde etti, 1457–1460 müzayedelerini sonuçlandırdı ve saldırganın harici sahipli hesabına (EOA) 200 ETH gönderdi. |
| 2026-10-06 06:19:35 | 0xb8ecff9c129d8d9331c85558eaeddff29a38c4c16b71a40986acbf8f6febefeb | Tornado Cash router'ına yapılan dokuz 10 ETH yatırımından ilki. |
Önemli adresler
| Adres | Rol |
|---|---|
| 0x01EB957E5C7DcDDD60F3C875956cCc6fb9BdA5FA | Saldırganın harici sahipli hesabı (EOA). |
| 0xEc997d2aD033277913d6002277353368E8321dcF | Saldırı sözleşmesi. |
| 0xf09a13072Ed939B79Bc25B66AA3a836ea6DCC170 | Kurbanın Vat'taki hesabı üzerinde hâlâ devredilmiş izinlere sahip olan kötü amaçlı adaptör modülü. |
| 0x9c05a05893Ada984FC20D0DA0c046De5Cc0e8273 | Güvenlik açığı bulunan sözleşme (eski müzayede keeper'ı, AdminUpgradeabilityProxy). |
| 0x68399ed8aa33C5b43F863EE6782de492006A5546 | Güvenlik açığı bulunan sözleşme implementasyonu (kaynak kodu doğrulanmamış). |
| 0xaDC374E77b89Af0B8B39F7c47E8e0A37B6DaF073 | Mart 2020'de keeper'ın sahibi ve operatörü. |
| 0xd8a04F5412223F513DC55F839574430f5EC15531 | MakerDAO ETH-A Flipper, teminat satışı için kullanılan ve kullanımdan kaldırılmış bir müzayede mekanizması. |
| 0x35D1b3F3D7966A1DFe207aa4514C12a259A0492B | MakerDAO Vat, temel muhasebe modülü. |
| 0x2F0b23f53734252Bda2277357e97e1517d6B042A | MakerDAO ETH-A GemJoin, teminat varlığı için çıkış noktası. |
| 0xd90e2f925DA726b50C4Ed8D0Fb90Ad053324F31b | Çalınan fonları alan adres olan Tornado Cash router'ı. |
| 0x12D66f87A04A9E220743712cE6d9bB1B5616B8Fc | Saldırganın ilk fonlamasının kaynağı olan Tornado Cash 0.1 ETH havuzu. |
Saldırının nasıl gerçekleştiği
Modülün devreye alınması
İstismar, saldırı sözleşmesinin 0xf09a13072Ed939B79Bc25B66AA3a836ea6DCC170 adresinde bir adaptör modülü oluşturmasıyla başladı. Oluşturma sırasında modül şu parametreleri aldı: Flipper, Vat, ETH-A GemJoin, teminat türü (ilk), WETH, bir ödeme adresi ve dört müzayede kimliği.
İzinlerin devredilmesi
Saldırı sözleşmesi, keeper fonksiyonu 0x8804d1de'yi çağırdı ve ona ⟦f09⟧ adresinde yeni oluşturulan adaptörü aktardı. Keeper daha sonra modülün drip() ve vat() fonksiyonlarını çağırdı, Vat.can() aracılığıyla kendisine daha önce izin verilip verilmediğini kontrol etti ve Vat.hope()'u çağırdı. Bu, modüle Vat sisteminde keeper'ın hesabını yönetme konusunda sınırsız izinler verdi.
Geri çağırma (callback)
Keeper daha sonra saldırı sözleşmesinin join() fonksiyonunu çağırdı. Bu, yeni izinlerin zaten geçerli olduğu bir anda, saldırganın yazdığı koda kontrolü devretti.
Açık artırmaların sonuçlandırılması
Geri çağırma içinde, modül hizmetten kaldırılan ETH-A Flipper'ın deal(id) fonksiyonunu 1457, 1458, 1459 ve 1460 açık artırmaları için çağırdı. Mart 2020'te keeper, dört 50 ETH'lik lotun her birini sıfır teklifle kazanmıştı, ancak anlaşmaları hiç sonuçlandırmamıştı. Açık artırmalar sonuçlandırıldığında, 200 ETH, keeper'ın Vat'taki hesabına ETH-A teminatı olarak işlendi.
Fonların çekilmesi
Modül, keeper'ın teminat bakiyesini okudu ve elde ettiği izinleri kullanarak flux() fonksiyonuyla 200 ETH'nin tamamını keeper'ın Vat'taki hesabından kendi adresine taşıdı. Ardından teminatı ETH-A GemJoin üzerinden 200 WETH olarak çekti ve WETH'i saldırı sözleşmesine gönderdi.
Güvenlik açığının temelinde ne yatıyor?
Saldırının temel nedeni, 0x68399ed8aa33C5b43F863EE6782de492006A5546 adresindeki keeper uygulamasında 0x8804d1de fonksiyonunda erişim kontrolünün bulunmamasıydı.
Hope, flux ve move işlemleri için keeper'ın sarmalayıcıları da dahil olmak üzere sözleşmenin diğer tüm yetkili fonksiyonları, önce bir ds-auth kontrolü çalıştırır ve yetkisiz çağrıları ds-auth-unauthorized hatasıyla reddeder.
Buna karşılık 0x8804d1de fonksiyonu herhangi bir adresi adaptör olarak kabul eder, keeper o adrese henüz izin vermemişse o adres için Vat.hope()'u çağırır ve ardından aynı adres üzerinde join()'i çağırır.
Keeper daha sonra join()'i çağırdığı için, saldırganın modülü bu izinlerin zaten geçerli olduğu bir anda kendi kodunu çalıştırabildi.
2020'daki dört kullanılmamış lot, bu güvenlik açığını saldırgan için kârlı hale getirdi. Herhangi biri bir açık artırma için deal fonksiyonunu çağırabilir.
DeFiTuna'ya yuvarlamayı öğrettiler: bir mantık hatası $570 bin USDC'ye mal oldu20 Tem 2026Devamını okuFonların hareketi
Saldırgan, güvenlik açığından yararlanmak için kullanılan işlem içinde doğrudan 200 ETH'nin tamamını aldı. Sadece altı dakika sonra, 06:19:35 UTC'de saldırgan, fonları Tornado Cash'e taşımaya başladı ve bunları 20 adet 10 ETH'lik yatırma işlemi olarak gönderdi.

