2022年10月13日,據據Beosin EagleEye Web3安全預警與監控平台的輿情消息,FTX交易所遭到gas竊取攻擊,黑客利用FTX支付的gas費用鑄造了大量XEN TOKEN。
金色財經邀請Beosin安全團隊第一時間對事件進行了分析,結果如下:
1、事件相關信息
其中一部分攻擊交易:
0xc96b84cd834655290aa4bae7de80a3c117cc19d414f5bcf2fb85b8c5544300890x8eb73bd5c08318a4cfd233940c3a58744830cda999e59ecbc56f094618a91d690x6bada8e084f8d3b62311f0b6eda10f2690e7542dab75a0de436a640036bccf94
其中一個攻擊者地址0x1d371CF00038421d6e57CFc31EEff7A09d4B8760其中一個攻擊合約0xCba9b1Fd69626932c704DAc4CB58c29244A47FD3被攻擊地址0xC098B2a3Aa256D2140208C3de6543aAEf5cd3A94(FTX熱錢包地址)
2、攻擊流程
以其中一筆攻擊交易為例(0x8eb73bd5c08318a4cfd233940c3a58744830cda999e59ecbc56f094618a91d69)
第一步,攻擊者先在鏈上部署攻擊合約(0xCba9b1Fd69626932c704DAc4CB58c29244A47FD3)
第二步,FTX熱錢包地址會向攻擊合約地址轉入小額的資金,利用攻擊合約(0xCba9…7FD3)進行批量創建子合約。由於整個攻擊中創建了大量合約,並且每次執行完子合約之後,子合約都會自毀,所以以下圖為例部分展示。
第三步,接下來子合約fallback()函數去向Xen合約發起鑄幣請求,如下函數,claimRank()函數傳入一個時間期限(最小1天)進行鑄幣,鑄幣條件是只用支付調用gas費,並無其他成本,並且claimMintRewardAndShare()函數為提取函數,該函數只判斷是否達到時間期限(本次黑客設置的時間期限為最小值1天),便可無條件提取到任何非零地址。但在此次調用過程中,交易發起者為FTX熱錢包地址,所以整個調用過程的gas都是由FTX熱錢包地址所支付,而Xen鑄幣地址為攻擊者地址。
前三個步驟,重複多次,並且每次重複過程中都會將已到期的代幣提取出來,並且同時發起新的鑄幣請求,黑客達成他的目標。
3、漏洞分析
本次攻擊主要利用了FTX項目沒有對接收方為合約地址進行任何限制,也沒有對ETH的gas Limit進行限制,導致攻擊可以利用合約來鑄造XEN代幣進行獲利。
截止發文時,Beosin安全團隊通過Beosin Trace對被盜資金進行追踪分析,FTX交易所損失81ETH,黑客通過DODO,Uniswap將XEN Token換成ETH轉移。
Beosin Trace資金追踪圖
4、事件總結
針對本次事件,Beosin安全團隊建議:
1.對錢包接收為合約的地址進行限制。 2.對業務中存在gas風險的業務對gas limit進行足夠小的限制。