北京時間2022年4月17日,CertiK審計團隊監測到Beanstalk協議被惡意利用,導致24,830 ETH和36,398,226 BEAN遭受損失。攻擊者創建了一個惡意提案,通過閃電貸獲得了足夠多的投票,並執行了該提案,從而從協議中竊取了資產。目前,攻擊者已將所有的ETH(約4.7億人民幣)轉移到了Tornado Cash。
攻擊步驟
攻擊前黑客的準備行動:
攻擊者將一些BEAN代幣存入Beanstalk,用以創建惡意提案”InitBip18″。該提案一旦生效,將把協議中的資產轉移給攻擊者。
正式發起攻擊流程:
-
攻擊者閃電貸了3.5億Dai、5億USDC、1.5億USDT、3200萬Bean和1160萬LUSD。
-
閃電貸的資產被轉換為795,425,740 BEAN3Crv-f和58,924,887 BEANLUSD-f。
-
攻擊者將步驟中獲得的所有資產存入Diamond合約,並投票給惡意的BIP18提案。
-
函數emergencyCommit()被立即調用以執行惡意的BIP18提案。
-
在步驟3和4之後,攻擊者能夠竊取合約中的36,084,584 BEAN, 0.54 UNIV2(BEAN-WETH), 874,663,982 BEAN3Crv及60,562,844 BEANLUSD-f。
-
攻擊者利用在步驟5中竊取的資產來償還閃電貸,並獲得了其餘的24,830 WETH和36,398,226 BEAN作為利潤。
漏洞分析
該漏洞的根本原因:
Silo系統中用於投票的BEAN3Crv-f和BEANLUSD-f 可以通過閃電貸獲得。然而,由於Beanstalk協議中缺乏反閃電貸機制,攻擊者可以藉用該協議所支持的眾多代幣從而為惡意提案投票。
攻擊者如何繞過驗證:
為了通過”emergencyCommit() “執行提案,攻擊者需要繞過以下驗證。
-
驗證一:確保BIP被提出後,有24小時的窗口期。
-
驗證二:確保對某一特定BIP的投票比例不低於閾值,即⅔。
由於BIP18提案是在一天前創建,因此驗證一可被繞過;通過閃電貸,BIP18提案獲得了78%以上的投票,超過了67%,因此繞過了驗證二。
資產去向
其他細節
漏洞交易
-
BIP18提案:https://etherscan.io/tx/0x68cdec0ac76454c3b0f7af0b8a3895db00adf6daaf3b50a99716858c4fa54c6f
-
執行BIP18:https://etherscan.io/tx/0xcd314668aaa9bbfebaf1a0bd2b6553d01dd58899c508d4729fa7311dc5d33ad7
合約地址
-
受害者合約:https://etherscan.io/address/0xc1e088fc1323b20bcbee9bd1b9fc9546db5624c5#code
-
攻擊者合約:https://etherscan.io/address/0x1c5dcdd006ea78a7e4783f9e6021c32935a10fb4
-
惡意提案:https://etherscan.io/address/0xe5ecf73603d98a0128f05ed30506ac7a663dbb69
-
攻擊者初始資金活動:https://arbiscan.io/address/0x71a715ff99a27cc19a6982ae5ab0f5b070edfd35
https://debank.com/profile/0x1c5dcdd006ea78a7e4783f9e6021c32935a10fb4/history
寫在最後
通過審計,我們可以發現閃電貸可用於操縱投票這一風險因素。攻擊發生後,CertiK的推特預警賬號以及官方預警系統已於第一時間發布了消息。同時,CertiK也會在未來持續於官方公眾號發布與項目預警(攻擊、欺詐、跑路等)相關的信息。