13 Mart 2023'te sistemimiz, Euler Finance'ın borç verme havuzunun bir flaş kredi saldırısına uğradığını tespit etti ve bu saldırı 197 milyon dolar zarara yol açtı. Önce topluluğu uyardık, ardından temel nedeni belirlemeye yardımcı olmak için bir analiz yayımladık.
1/ @eulerfinance is attacked. The root cause is due to the lack of liquidity check in the function donateToReserves()https://t.co/stWtPWK900
— BlockSec (@BlockSecTeam) 13 Mart 2023
See the detailed attack steps below. https://t.co/bm10OJHiXu pic.twitter.com/TDbYuzVWHe
Bu olayın temel nedeni, donateToReserves() fonksiyonundaki iflas kontrolünün eksikliğidir. Özellikle, güvenlik açığı bulunan sözleşme, kullanıcıların pozisyonlarının ödeme gücü olup olmadığını kontrol etmeksizin teminatlarını protokole bağışlamasına olanak tanıyan bir işlevsellik sunmaktadır. Daha da kötüsü, bu kötü pozisyonu ortadan kaldırmak için protokol, tasfiye edicilerin bu pozisyonu daha az borç ödeyerek tasfiye etmesi amacıyla büyük bir indirim sunmaktaydı. Saldırgan, bu işlevselliği kullanarak büyük bir pozisyon oluşturdu ve bu pozisyonu iflas ettirdi. Ardından, kâr elde etmek için teminatını indirimli fiyatla satın alabildi.
Arka Plan
Euler Finance'a Genel Bakış
Euler Finance, kullanıcıların belirtilen token'ları ödünç vermesine ve ödünç almasına olanak tanıyan Ethereum üzerindeki bir borç verme protokolüdür. Borç verenler Euler'ın likidite havuzuna para yatırdığında, karşılıklı miktarda EToken (faiz getiren ERC20 token'ları) basılır ve kendilerine gönderilir. Bu EToken'lar, yatırılan temel varlıklar karşılığında kullanılabilir.
Öte yandan, likidite alan borçlular DToken alır. Bu DToken'lar ERC20 uyumludur ve sahiplerinin bunları bağımsız olarak yakmasını engeller. Özellikle, token'ların herkese gönderilebilmesine izin vermek yerine, herkes tarafından alınabilirler; ancak bunları kabul etmek onay gerektirir. Temel varlık açısından, borçlular kredileri üzerindeki faizi ödemekten sorumludur ve bu faizin bir kısmı protokoldeki kötü borçları karşılamak için kullanılır.
Euler Finance'ın kaldıraçlı borçlanma (diğer adıyla öz-borçlanma) ve yumuşak tasfiye mekanizmaları, bu saldırının nedenini daha iyi anlamamıza yardımcı olan iki temel kavramdır.
Kaldıraçlı Borçlanma
Euler Finance, kullanıcıların özyinelemeli bir borçlanma stratejisini simüle etmelerini sağlayan kaldıraçlı borçlanma özelliği sunar. Kısaca, kullanıcılar teminat yatırarak EToken basabilir; bu EToken'lar daha fazla EToken ödünç almak için teminat olarak kullanılabilir. Sözleşme ayrıca borç token'ları olarak karşılıklı miktarda dToken basacaktır. Kullanıcının pozisyon sağlığı, EToken'ların ve dToken'ların değerlerine göre hesaplanır. Euler Finance'ın belgelerine göre, kullanıcılar 19 kata kadar kaldıraç kullanabilir. Kaldıraçlı borçlanma özelliği bu olayda kritik bir rol oynadı. Bu özelliğin yardımı olmadan, saldırgan kâr edemezdi. Kaldıraçlı borçlanma sayesinde saldırgan, flaş krediden elde edilen başlangıç fonlarının yaklaşık 11 katına kadar pozisyon büyüklüğünü artırdı.
Yumuşak Tasfiye
Euler Finance'ın teknik belgelerinde belirtildiği gibi, yumuşak tasfiye mekanizması, tasfiye edicilerin tasfiye edilen tarafın borcunu Compound ve Aave gibi protokollerin benimsediği sabit bir katsayıyla sınırlandırılmak yerine, esnek biçimde geri ödemesine yardımcı olmasını sağlar. Yumuşak tasfiye, bir pozisyonun sağlığı ne kadar düşükse, tasfiyeye uygun teminatın o kadar fazla olduğu anlamına gelir; bu olaydan elde edilen verilere göre, kötü borç durumunda bu oran %75'e kadar çıkabilmektedir. Bu nedenle, önemli ölçüde indirimli teminatın tasfiye edilmesi, saldırganın flaş kredisini kapatmasına ve kâr elde etmesine olanak tanıdı.
Güvenlik Açığı Analizi
Temel güvenlik açığı, yani iflas kontrolünün eksikliği, kullanıcıların EToken'larını pozisyonlarından protokolün rezervine bağış olarak aktarmak için kullandığı donateToReserves() fonksiyonu içinde mevcuttur. Normal kullanıcılar için böyle bir işlemi gerçekleştirmeye genellikle herhangi bir teşvik veya motivasyon bulunmamaktadır. Güvenlik açığı, donateToReserves() fonksiyonunun kullanıcı pozisyonlarından EToken'ları aktarırken bir sağlık kontrolü yapmamasında yatmaktadır. Bu durum, saldırganların kaldıraçlı borçlanma yoluyla oluşturdukları büyük pozisyondan EToken'ları doğrudan bağışlamasına olanak tanır; bu da pozisyon sağlığının %100'ün altına düşmesine ve kötü borcun oluşmasına neden olur.

Tasarıma göre Euler Finance, pozisyonları "yumuşak tasfiye etmek" için dinamik bir kapanış faktörü kullanır. Kısaca, bir pozisyon ne kadar az sağlıklıysa, o pozisyondaki teminatın tasfiye edilebilen oranı o kadar yüksektir. Kötü borç durumunda, tasfiye yüzdesi pozisyon içindeki teminatın %75'ine kadar çıkabilir (gerçek saldırı işlemine dayalı olarak hesaplanmıştır). Sonuç olarak, tasfiye edilen önemli miktardaki indirimli teminat, saldırganın flaş kredisini geri ödemesini ve kâr elde etmesini sağlar.
Saldırı Analizi
Farklı havuzları hedef alan birden fazla saldırı işlemi bulunmaktadır:
- 0xc310a0affe2169d1f6feec1c63dbc7f7c62a887fa48795d327d4d2da2d6b111d (DAI)
- 0x71a908be0bef6174bccc3d493becdfd28395d8898e355d451cb52f7bac38617 (WBTC)
- 0x62bd3d31a7b75c098ccf28bc4d4af8c4a191b4b9e451fab4232258079e8b18c4 (wstETH)
- 0x465a6780145f1efe3ab52f94c006065575712d2003d83d85481f3d110ed13d9 (USDC)
- 0x3097830e9921e4063d334acb82f6a79374f76f0b1a8f857e89b89bc58df1f311 (stETH)
- 0x47ac3527d02e6b9631c77fad1cdee7bfa77a8a7bfd4880dccbda5146ace4088f (WETH)
Saldırı adımları aşağıdaki gibidir (ilk saldırı işlemi örnek alınarak):
- Saldırgan, flaş kredi aracılığıyla AAVE'den 30 milyon DAI ödünç aldı.
- Saldırgan 20 milyon DAI yatırarak karşılığında 20 milyon eDAI aldı.
- Euler Finance kaldıraçlı borçlanma imkânı sunduğundan, saldırgan 195 milyon eDAI ve 200 milyon dDAI basabildi. Artık saldırganın elinde 215 milyon eDAI ve 200 milyon dDAI bulunmaktaydı.
- Yukarıdakine devam edildi. Saldırganın daha fazla eDAI basabilmesi için 10 milyon borç geri ödendi. Artık saldırganın elinde 215 milyon eDAI ve 190 milyon dDAI bulunmaktaydı.
-
- adım tekrarlandı. Artık saldırganın elinde 410 milyon eDAI ve 390 milyon dDAI bulunmaktaydı.
- Saldırgan, 100 milyon eDAI bağışlamak için donateToReserve fonksiyonunu çağırdı. Ancak bu süreçte saldırganın sağlık faktörü kontrol edilmedi. Bu durumda, pozisyon artık tasfiye edilebilir hale geldi (310 milyon eDAI - 390 milyon dDAI), bu da kâr elde etme fırsatı doğurdu.
- Saldırgan, tasfiye edici olarak başka bir adres sözleşmesini (0xa0b3...) kullanarak pozisyonu tasfiye etti. Tasfiye edici (0xa0b3...) 310 milyon eDAI ve 259 milyon dDAI aldı.
- Saldırgan, tasfiye edicinin pozisyonundaki (0xa0b3...) 38,9 milyon eDAI'yi yakarak 38,9 milyon DAI çekti (iflas kontrolleri nedeniyle daha fazlası çekilemedi).
- Saldırgan flaş kredisini geri ödedi.
Temel saldırı adımları 2-7, işlem izinde işaretlenmiştir.

Özet
Bu, 2023 yılının en büyük hack olayıydı; medyaya "dolambaçlı, zaman zaman kafa karıştırıcı ve hatta çelişkili bir anlatı" sunan Federico Jaime adlı 20 yaşındaki Arjantinli bir kişi tarafından 197 milyon dolarlık rekor kırıcı bir fon çalındı. Bununla birlikte, "kurtarılabilir fonların tamamı" daha sonra Euler Finance'ın hazine adresine iade edildi. Ancak küçük bir kısım (yaklaşık 200.000 dolar) "farkında olmadan" ABD Hazinesi tarafından yaptırım uygulanan Kuzey Kore devlet destekli suç örgütü olduğu iddia edilen Lazarus Grubu'na gönderildi. Ayrıntılı ve ilgi çekici hikaye için şu bağlantılara başvurabilirsiniz: bağlantı1 ve bağlantı2.
Bu olayın temel nedeni, iflas kontrollerinin eksikliğiydi; bu da önemli bir ders niteliği taşımaktadır. Aslında, bir borç verme protokolü için kullanıcı pozisyonlarını etkileyebilecek herhangi bir prosedürde pozisyon sağlık kontrollerinin uygulanıp uygulanmaması gerektiğinin değerlendirilmesi büyük önem taşımaktadır. Ayrıca proje ekipleri, borç verme protokollerini önemli tasfiyeler açısından proaktif biçimde izlemeli ve bu tür olayları zamanında tespit edip müdahale etmek için etkili uyarı sistemleri oluşturmalıdır.
Bu serideki diğer makaleleri okuyun:
- Giriş: 2023'ün En "Çarpıcı" On Güvenlik Olayı
- #1: Flashbots Relay'deki Güvenlik Açıklarından Yararlanarak MEV Bot'larını Avlamak
- #3: KyberSwap Olayı: Son Derece İnce Hesaplamalarla Yuvarlama Hatalarının Ustaca Sömürülmesi
- #4: Curve Olayı: Derleyici Hatası Masum Kaynak Koddan Hatalı Bytecode Üretiyor
- #5: Platypus Finance: Şans Eseri Üç Saldırıdan Sağ Çıkmak
- #6: Hundred Finance Olayı: Güvenlik Açığı Bulunan Forked Protokollerde Hassasiyetle İlgili Exploit Dalgasını Başlatmak
- #7: ParaSpace Olayı: Sektörün En Kritik Saldırısını Önlemek İçin Zamanla Yarış
- #8: SushiSwap Olayı: Beceriksiz Bir Kurtarma Girişimi Bir Dizi Kopyacı Saldırıya Yol Açıyor
- #9: MEV Bot 0xd61492: Dahiyane Bir Exploit'te Avcıdan Avlanana
- #10: ThirdWeb Olayı: Güvenilen Modüller Arasındaki Uyumsuzluk Güvenlik Açığını Ortaya Çıkarıyor



