Back to Blog

~542 bin dolar kayıp: MakerDaoBot Açığı | BlockSec Haftalık Bülteni

Code Auditing
14 Ekim 2026
6 min read
Key Insights
  • Bu rapor, Ethereum üzerinde yaklaşık $542K kayba yol açan 1 güvenlik olayını kapsıyor.

  • MakerDaoBot'ta, herhangi bir çağıranın botun dahili bakiyeleri üzerindeki kontrolü harici bir sözleşmeye vermesine olanak tanıyan işlevde erişim kontrolü yoktu.

  • Fonlar üzerinde kontrol veren bir işlev, hem çağıranın hem de bu kontrolü alan sözleşmenin kimliğini doğrulamalıdır.

Geçtiğimiz hafta (2026/10/05 - 2026/10/11), tahmini toplam kaybı yaklaşık 542 bin ABD doları olan 1 güvenlik olayı gözlemledik.

Tarih Olay Tür Tahmini Kayıp
2026/10/06 MakerDaoBot Erişim Kontrolü Eksikliği ~542 bin ABD doları

Ücretsiz Güvenlik Taraması

Kendi geliştirdiğimiz otomatik analiz motoruyla hızlı bir güvenlik kontrolü.

Ücretsiz tarayın

Haftanın Öne Çıkan Olayı: MakerDaoBot

6 Ekim 2026'da bir saldırgan, Ethereum üzerindeki eski bir MakerDAO likidasyon botu olan MakerDaoBot'taki erişim kontrolü eksikliğinden yararlanarak yaklaşık 542 bin ABD doları değerinde 200 ETH çekti. Güvenlik açığı bulunan işlev, herhangi bir çağırıcının harici bir sözleşme belirtmesine, bu sözleşmeye botun bakiyeleri üzerinde kontrol vermesine ve kodunu çalıştırmasına olanak tanıyordu. Saldırgan bu yolu kullanarak dört eski teminat açık artırmasını sonuçlandırdı ve serbest bırakılan ETH miktarını tek bir işlemde transfer etti.

Arka Plan

MakerDaoBot, eski likidasyon sisteminin kullandığı teminat açık artırması sözleşmesi Flipper aracılığıyla MakerDAO'nun eski ETH-A teminat açık artırmalarına katılıyordu. Bot, Vat izinlerini yönetiyor, ETH ve DAI yatırıp çekiyor ve likidasyon görevlerini işliyordu.

Vat, MakerDAO'nun dahili defteridir. Her adresin teminat türüne göre serbest teminatını gem[ilk][address] içinde, dahili DAI bakiyesini ise dai[address] içinde kaydeder; ayrı bir cüzdan veya hesap sözleşmesi yoktur. Dolayısıyla MakerDaoBot'un Vat bakiyeleri, bot sözleşmesinin kendi adresi altında kayıtlı defter girdileridir.

hope(usr) çağrısı bu bakiyeleri transfer etmez. can[msg.sender][usr] değerini 1 olarak ayarlayarak usr adresinin Vat'ın wish() izin denetiminden geçmesini ve msg.sender altında kayıtlı bakiyeler üzerinde işlem yapmasını sağlar. flux() ve move() gibi işlevler, dahili teminat veya DAI transfer ederken bu denetimi kullanır.

mapping(address => mapping (address => uint)) public can;
function hope(address usr) external note { can[msg.sender][usr] = 1; }
function nope(address usr) external note { can[msg.sender][usr] = 0; }
function wish(address bit, address usr) internal view returns (bool) {
    return either(bit == usr, can[bit][usr] == 1);
}

mapping (bytes32 => mapping (address => uint)) public gem;  // [wad]
mapping (address => uint256)                   public dai;  // [rad]

function flux(bytes32 ilk, address src, address dst, uint256 wad) external note {
    require(wish(src, msg.sender), "Vat/not-allowed");
    gem[ilk][src] = sub(gem[ilk][src], wad);
    gem[ilk][dst] = add(gem[ilk][dst], wad);
}
function move(address src, address dst, uint256 rad) external note {
    require(wish(src, msg.sender), "Vat/not-allowed");
    dai[src] = sub(dai[src], rad);
    dai[dst] = add(dai[dst], rad);
}

Güvenlik Açığı Analizi

Temel neden, 0x6839...5546 adresindeki MakerDaoBot sözleşmesinin 0x8804d1de() işlevinde erişim kontrolünün bulunmamasıydı. İşlev, varg0 değerini harici bir sözleşme adresi olarak ele alıyor (aşağıda adaptör olarak anılıyor) ve bu adreste drip(), vat() ve daha sonra join() çağrılarını yapıyordu. Bot, Vat adresini vat() aracılığıyla aldıktan sonra adaptörün kendi Vat bakiyeleri üzerinde işlem yapıp yapamayacağını kontrol ediyordu. Yapamıyorsa izin vermek için hope(varg0) çağrısını yapıyor, ardından aynı adaptörün join() işlevini çağırıyordu.

Aynı sözleşmedeki diğer ayrıcalıklı giriş noktaları, işlemlerini gerçekleştirmeden önce bir ds-auth denetimi kullanıyordu. Aşağıdaki karşılaştırma, korumalı iki giriş noktasının bir bytes4 seçicisini ve msg.sender değerini yetkilendirme yardımcı işlevine ilettiğini, ardından denetim başarısız olduğunda ds-auth-unauthorized hatasıyla işlemi geri aldığını gösteriyor. 0x8804d1de() işlevinde eşdeğer bir çağırıcı denetimi yoktu.

Bu nedenle 0x8804d1de() işlevi, herhangi bir çağırıcının Vat izni verilecek adresi seçmesine olanak tanıyordu. Bot, hope() aracılığıyla bu adrese izin veriyor ve hemen ardından adresin join() işlevini çağırıyordu. Yetki devri bu harici çağrı sırasında etkin kaldığından, seçilen adresteki kod botun dahili teminat ve DAI bakiyeleri üzerinde işlem yapabiliyordu.

Saldırı Analizi

Aşağıdaki analiz, 0xbb6940...f3a88c işlemine dayanmaktadır.

  • Adım 1: Saldırganın harici hesabı (EOA), saldırganın dağıttığı bir saldırı sözleşmesini çağırdı. Bu sözleşme kötü amaçlı bir adaptör dağıttı, ardından adaptörün adresiyle MakerDaoBot'un 0x8804d1de() işlevini çağırdı. Bot, Vat'ın can eşlemesinde mevcut bir yetki devri bulamayınca hope() çağrısını yaparak adaptörün botun adresi altında kayıtlı bakiyeler üzerinde işlem yapmasına izin verdi.
  • Adım 2: MakerDaoBot, adaptörün join() işlevini çağırdı. Yetki devri etkinken kötü amaçlı kod, kullanımdan kaldırılmış ETH-A Flipper üzerinde deal(uint256 id) çağrısı yaparak 1457, 1458, 1459 ve 1460 numaralı açık artırmaları sonuçlandırdı. Adaptör daha sonra Vat iznini kullanarak 200 birim ETH-A teminatını MakerDaoBot'tan kendisine aktardı, ETH Join üzerinden çekerek 200 WETH aldı ve tokenları saldırı sözleşmesine transfer etti.
  • Adım 3: Saldırı sözleşmesi 200 WETH tokenını ETH'ye dönüştürdü ve o sırada yaklaşık 542 bin ABD doları değerinde olan 200 ETH'yi saldırganın harici hesabına gönderdi.

Phalcon Explorer'ı Kullanmaya Başlayın

Bilinçli Kararlar Vermek İçin İşlemleri Derinlemesine İnceleyin

Şimdi ücretsiz deneyin

Sonuç

Temel neden, MakerDAO'nun Vat izin sistemindeki bir kusur değil, MakerDaoBot'taki erişim kontrolü eksikliğiydi. Herkese açık bir işlev, herhangi bir çağırıcının harici bir sözleşme seçmesine, bu sözleşmeye botun dahili bakiyeleri üzerinde kontrol vermesine ve kodunu çalıştırmasına olanak tanıyordu. Saldırgan bu yolu kullanarak dört eski açık artırmayı sonuçlandırdı ve 200 ETH çekti.

Varlıklar üzerinde kontrol yetkisi devreden her işlev, hem işlemi kimin başlatabileceğini hem de hangi harici sözleşmelerin bu yetkiyi alabileceğini kısıtlamalıdır. Hassas entegrasyon yolları, diğer ayrıcalıklı işlevlerle aynı yetkilendirme kontrollerini uygulamalı ve yalnızca açıkça onaylanmış sözleşmeleri kabul etmelidir.

Web3 için En İyi Güvenlik Denetçisi

Yayına almadan önce tasarımı, kodu ve iş mantığını doğrulayın

BlockSec Hakkında

BlockSec, uçtan uca blokzincir güvenliği ve kripto uyum hizmetleri sağlayıcısıdır. Protokol ve platformların tüm yaşam döngüsü boyunca müşterilerin kod denetimi (akıllı sözleşmeler, blokzincirler ve cüzdanlar dâhil) yapmasına, saldırıları gerçek zamanlı olarak durdurmasına, olayları analiz etmesine, yasa dışı fonları izlemesine ve AML/CFT yükümlülüklerini yerine getirmesine yardımcı olan ürünler ve hizmetler geliştiriyoruz.

BlockSec, saygın konferanslarda blokzincir güvenliği üzerine birçok makale yayımladı, DeFi uygulamalarına yönelik birkaç sıfır gün saldırısını bildirdi, 20 milyon dolardan fazla varlığı kurtarmak için birçok saldırıyı engelledi ve milyarlarca dolar değerindeki kripto varlığın güvenliğini sağladı.

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit