2022 年 10 月 19 日,據 Beosin EagleEye Web3 安全 預警與監控平臺 監測顯示,Celo 生態上的 Moola 協議遭受攻擊,黑客獲利約 840 萬美元。
據悉,Moola Market 是一個非托管的流動性協議。使用過度抵押貸款、委托貸款或閃電貸款的借款人支付利息,存款人可以賺取複利。攻擊發生之後,Moola Market 表示,其團隊正在積極調查這一事件,平臺上的所有活動都已暫停。
關於本次攻擊事件,Beosin 安全團隊第一時間進行了分析,結果如下:
# 事件相關資訊
攻擊者地址
0x5DAE2C3d5a9f35bFaf36A2E6edD07c477f57789e
通過下圖可以註意到黑客的起始資金為 18 萬枚 CELO(價值約 13 萬美元),準備就緒之後,黑客便開始了他的攻擊之旅。
第一步:看下圖,可以看到攻擊者進行了多筆交易,用 CELO 買入 MOO。
第二步:攻擊者使用 MOO 作為抵押品借出 CELO。根據抵押 借貸 的常見邏輯,攻擊者抵押了價值 a 的 MOO,可借出價值 b 的 CELO。
第三步:攻擊者用貸出的 CELO 購買 MOO,從而繼續提高 MOO 的價格。每次交換之後,MOO 對應 CELO 的價格變高。
第四步:由於抵押借貸合約在借出時會使用交易對中的實時價格進行判斷,導致用戶之前的借貸數量,並未達到價值 b,所以用戶可以繼續借出 CELO。通過不斷重複這個過程,攻擊者把 MOO 的價格從 0.02 CELO 提高到 0.73 CELO。
第五步:攻擊者進行了累計 4 次抵押 MOO,10 次 swap(CELO 換 MOO),28 次借貸,達到獲利過程。
-8.82M CELO(25 次借貸)
-1.85M MOO(1 次借貸)
-765k cEUR(1 次借貸)
-66k cUSD(1 次借貸)
# 漏洞分析
本次遭受攻擊的抵押借貸實現合約並未開源,根據攻擊特徵可以猜測攻擊屬於價格操縱攻擊。
抵押借貸合約支持 4 種代幣的借貸 CELO,cEUR,cUSD,MOO。推測抵押借貸合約中每種代幣的價格可能是由其與 CELO 的交易對進行判斷的。因為後 3 種代幣未進行過交換,所以價格沒有改變,只借貸了一次。
# 資金追蹤
截至發文時,攻擊者將約 93.1% 的所得資金返還給了 Moola Market 項目方,將 50 CELO 捐給了 impact market。自己留下了總計 65 萬個 CELO 作為「賞金」。