2022年3月27日,成都鏈安鏈必應-區塊鏈安全態勢感知平台輿情監測顯示,DeFi協議Revest Finance遭到黑客攻擊,損失約12萬美元。
據悉,Revest Finance是針對DeFi領域的staking的解決方案,用戶通過Revest Finance參與任何DeFi的staking,都可以直接創建生成一個NFT(該NFT包含了這個staking倉位的當前以及未來價值)。
在攻擊發生之後,項目方官方發推表示他們以太坊合約遭受了攻擊,目前已採取措施確保所有鏈中的剩餘資金安全。
成都鏈安技術團隊對此事件進行了相關簡析。
1 分析如下
地址列表
Token合約:
0x56de8BC61346321D4F2211e3aC3c0A7F00dB9b76
被攻擊合約:
0x2320a28f52334d62622cc2eafa15de55f9987ed9
攻擊合約:
0xb480Ac726528D1c195cD3bb32F19C92E8d928519
攻擊者:
0xef967ECE5322c0D7d26Dab41778ACb55CE5Bd58B
交易截圖
首先攻擊者通過uniswapV2call 2次調用受攻擊的目標合約中的mintAddressLock函數。
該mintAddressLock函數用於查詢並向目標鑄造NFT,並且nextid(FNFTHandler.fnftsCreated)會在鑄造NFT後進行更新。
攻擊者第一次調用mintAddressLock函數鑄造了2個ID為1027的Token為後續攻擊做準備,隨後再次調用mintAddressLock鑄造了3600個ID為1028的Token,在mint函數完成前攻擊者重入了depositAdditionalToFNFT函數【ERC1155 onERC1155Received 重入】,由於NFT nextId(FNFTHandler.fnftsCreated)在mint函數鑄造NFT完成並通知後進行更新,此時的nextId仍然為1028,並且合約並未驗證1028的Token數量是否為0,因此攻擊者再次成功地鑄造了1個ID 為1031的Token,完成了攻擊。
2 總結建議
此次攻擊中的鑄幣相關函數未嚴格按照檢查-生效-交互模式設計,且未考慮到ERC1155 token轉賬重入的可能性。
建議在合約設計時嚴格按照檢查-生效-交互模式設計,並在ERC1155 token相關DeFi項目中加入防重入的功能。
截止目前為止,攻擊者仍然未將資產進行轉移,成都鏈安將持續進行監控。
攻擊者地址:
https://etherscan.io/address/0xef967ece5322c0d7d26dab41778acb55ce5bd58