Hundred 與Agave 閃電貸攻擊事件分析

1.前言

北京時間3 月15 日晚,知道創宇區塊鏈安全實驗室 監測到Gnosis 鏈上的借貸類協議 Hundred Finance 與Agave 均遭遇了閃電貸襲擊,包括 AAVE 的分支Agave 和 Compound 的分支Hundred Finance 。協議損失超1100 萬美元。目前 項目方已暫停其數百個市場。

知道創宇區塊鏈安全實驗室 第一時間跟踪本次事件並分析。

v2-de9d66c8c516e1d5564ef88809bad001_720w.jpg

2.分析

2.1 攻擊者相關信息

Hundred Finance被攻擊tx:

0x534b84f657883ddc1b66a314e8b392feb35024afdec61dfe8e7c510cfac1a098

攻擊合約:0xdbf225e3d626ec31f502d435b0f72d82b08e1bdd

攻擊地址: 0xd041ad9aae5cf96b21c3ffcb303a0cb80779e358

攻擊後跨鏈匿名化:https://etherscan.io/txs?a=0xd041ad9aae5cf96b21c3ffcb303a0cb80779e358

Agave被攻擊tx:

0xa262141abcf7c127b88b4042aee8bf601f4f3372c9471dbd75cb54e76524f18e

攻擊合約:0xF98169301B06e906AF7f9b719204AA10D1F160d6

攻擊地址: 0x0a16a85be44627c10cee75db06b169c7bc76de2c

攻擊後跨鏈匿名化:https://etherscan.io/txs?a=0x0a16a85be44627c10cee75db06b169c7bc76de2c

2.2 攻擊流程

由於Hundred Finance 與Agave 攻擊流程與手法類似,因此我們使用Hundred Finance 進行分析。

Hundred Finance 攻擊調用流程

1、攻擊者利用合約在三個池子中利用閃電貸借出WXDAI 和USDC

v2-9bb28b077b973b461e4378377fafe760_720w.jpg

2、在WETH 池子質押借出的部分USDC

v2-5a399c956584e2dbad2a811b3ecffca1_720w.jpg

3、利用重入利用一筆質押,超額借出池子中資金

v2-c6078ad97f87f8ffdb891df4f3d2e1b9_720w.jpg

4、重複質押-重入借出步驟,將其他兩個池子資產超額借出

v2-fd8dd5181bf8bdfb07a477a2cb1c17dc_720w.jpg

5、歸還閃電貸

v2-15d840e2a7dbf8cce4c10cdb5f8f7768_720w.jpg

6、獲利轉移

v2-46f0e6ae8c8e6bffcea4e54759224203_720w.jpg

2.3 漏洞細節

導致本次問題的根本原因是由於在Gnosis 鏈上的官方橋接代幣xDAI 合約中實現了一個對於to 地址的回調( callAfterTransfer 函數)

合約實現地址:

https://blockscout.com/xdai/mainnet/address/0xf8D1677c8a0c961938bf2f9aDc3F3CFDA759A9d9/contracts

v2-80d43834b0d23c8536781b52401625b6_720w.jpg

該回調將直接導致重入漏洞的產生,同時由於在Hundred Finance 團隊fork 的Compound 版本中沒有嚴格遵循檢查-生效-交互(防止重入的另一種方式),進而導致了總借貸量更新晚於重入實現。最終攻擊者得以超額借貸。

v2-4810adc8fc14eae2acfeeb7171e88ad0_720w.jpg

類似的,對於Agave 項目方,攻擊者利用liquidateCall 函數內部調用會調用xDAI 的 callAfterTransfer 方法進行回調,最終導致攻擊者能再次進行借貸。

v2-71191cfe67889dcd516e95c82b726e00_720w.jpg

在Hundred Finance 攻擊中攻擊者重入的調用路徑如下:

v2-c8f519e3ba29fc8819f1b329ac76632e_720w.jpg

在Agave 攻擊中攻擊者回調路徑(調用liquidateCall 時內部調用時回調)如下:

v2-ead88ed5fc34b9da884d275721756aa4_720w.jpg

3.總結

此次遭受攻擊的兩個借貸項目由於錯誤的引入了存在重入的token,同時項目方的fork 的代碼沒有採用檢查-生效-交互模式導致了問題的發生。

我們強調:對於一個優秀的項目的引用必須建立在足夠的理解和嚴謹的開發上,尤其是存在差異化的部分,切忌顧此失彼最終因為一個小的差錯導致項目全部的損失。

近期,各類合約漏洞安全事件頻發,合約審計、風控措施、應急計劃等都有必要切實落實。

Total
0
Shares
Related Posts