0x1 事件背景
APE 是一種代币,旨在支持由社區控制和構建的下一步行動。它将作為一個分散的協議層,用于主導社區倡議,推動文化進入元宇宙。
零時科技區塊鍊安全情報平台監控到消息,北京時間 2022 年 3 月 17 日,APE 遭到黑客攻擊,零時科技安全團隊及時對此安全事件進行分析。
0x2 攻擊者信息零時科技安全團隊通過初步追蹤分析,此次攻擊發生在 Ethereum 鍊,主要攻擊信息如下:
攻擊者錢包地址:
• 0x6703741e913a30D6604481472b6d81F3da45e6E8
攻擊者創建的相關合約地址:
• 0x3EbD3D86f810B141F9b2e9B15961FC66364b54f3
• 0x7797A99a2e91646aBdc9DC30e838A149CCB3013B
Token 合約(漏洞合約):
• 0x025C6da5BD0e6A5dd1350fda9e3B6a614B205a1F
攻擊交易流程:
• 0xeb8c3bebed11e2e4fcd30cbfc2fb3c55c4ca166003c7f7d319e78eaab9747098
漏洞相關合約:
•BeaconProxy: 0xEA47B64e1BFCCb773A0420247C0aa0a3C1D2E5C5
•NFTXVaultUpgradeable: 0x73d2ff81fcea9832fc9ee90521abde1150f6b52a
0x3 攻擊分析将攻擊事務放到 tenderly 上分析,得下圖:
攻擊者主要進行了三步操作:
- 步驟1: 攻擊者通過閃電貸獲取 ERC 20 代币,将其兌換為 NFT
- 步驟2: 攻擊者用兌換的 NFT 獲取 APE 空投代币
- 步驟3: 将 NFT 歸還,獲取質押的 ERC 20 代币,歸還閃電貸,将獲利資金轉到錢包地址
攻擊成功原因
- 步驟1: 閃電貸(合約:NFTXVaultUpgradeable)
如上圖 999 行所示:「數量 費用」的 vToken 會被銷毀掉,所以攻擊者準備的 vToken 需大于借來的 vToken 才能執行 flashLoan() 函數。
- 步驟2: 贖回 NFT(合約:NFTXVaultUpgradeable)
如圖所示:redeem 函數調用 redeemTo 函數,在 2127 行銷毀了代币,2134 行扣除了手續費,2137 行直接向調用者發送 NFT。
- 步驟3: 領取空投代币(合約:AirdropGraphsToken)
如圖所示:在第 105 行核對 alpha.balanceOf() 和 beta.balanceOf() 以确保調用者确實是 BAYC/MAYC 持有者。然後在第 114-115 行,用清單來注記已領取的 tokenId,如此一來第 110 行中的 getClaimableTokenAmountAndGammaToClaim() 函數就能讓合約調用者僅領取到可領取的 ApeCoin 數量。
- 步驟4: 鑄币(合約:NFTXVaultUpgradeable)
如圖所示:2089 行将 NFT 給合約,2092 行發送代币,2094 行消耗手續費。
整個 NFTXVaultUpgradeable 合約提供了 鑄币、贖回 和 閃電貸 功能。攻擊者利用這一套身法,輕松繞過 AirdropGraphsToken 合約對當前持有 NFT 數量的檢查,獲得了不錯的收益。
至此,攻擊者利用此攻擊流程,通過對 AirdropGraphsToken、NFTXVaultUpgradeable 合約進行攻擊,共獲利約 35 萬美元(以攻擊時的市場價計算)。
0x5 總結通過此次攻擊事件來看,攻擊成功最重要的因素是 AirdropGraphsToken 合約中:沒有對空投的原則做合理的效驗。攻擊者可以通過閃電貸兌換 NFT 來獲取 APE 空投,再将 NFT 鑄币歸還閃電貸會對項目造成威脅。
0x6 安全建議對于此類安全事件,零時科技安全團隊給出下述安全建議。
• 不依賴可被人為操控的因素對資産定價
• 運用機制判斷依賴條件是否合法(如:判斷依賴條件的持續時間)
,