OrionProtocol遭重入攻擊 近300萬美元資金被盜

robot
摘要生成中

OrionProtocol遭受重入攻擊事件分析

2023年2月2日下午,Ethereum和Binance鏈上的OrionProtocol合約因存在漏洞而遭受重入攻擊。攻擊者成功竊取了約290萬美元的資金,其中包括Ethereum上的2,844,766 USDT和BSC上的191,606 BUSD。

攻擊過程分析

攻擊者首先創建了一個特殊的Token合約,並對其進行了轉移和授權操作,爲後續的攻擊做好準備。隨後,攻擊者通過UNI-V2的swap方法進行借款,並調用ExchangeWithAtomic合約的swapThroughOrionPool方法進行代幣兌換。

兌換路徑設置爲[USDC, 攻擊者創建的Token, USDT]。在兌換過程中,由於攻擊者創建的Token合約中包含回調功能,導致在ExchangeWithAtomic.swapThroughOrionPool方法執行時觸發了重入攻擊。攻擊者通過Token.Transfer繼續回調ExchangeWithAtomic.depositAsset方法,造成存款金額不斷累加,最終通過取款操作完成了獲利。

OrionProtocol 重入攻擊分析附PoC

資金流向

攻擊者的初始資金來自於某交易平台的熱錢包帳戶。攻擊獲利的1,651枚ETH中,657.5枚仍留在攻擊者的錢包地址中,其餘部分已通過混幣服務進行轉移。

OrionProtocol 重入攻擊分析附PoC

漏洞分析

漏洞的核心問題出現在doSwapThroughOrionPool函數中。該函數在執行代幣轉帳後更新curBalance變量,這爲攻擊者創造了可乘之機。攻擊者在自己創建的Token合約的transfer函數中添加了回調功能,該回調會再次調用depositAsset函數。這導致curBalance變量被錯誤更新,使攻擊者能夠在償還閃電貸後通過withdraw函數提取額外資金。

OrionProtocol 重入攻擊分析附PoC

OrionProtocol 重入攻擊分析附PoC

OrionProtocol 重入攻擊分析附PoC

攻擊復現

研究人員提供了部分POC代碼,模擬了攻擊過程。測試結果顯示,攻擊者成功利用合約漏洞獲取了額外的USDT。

OrionProtocol 重入攻擊分析附PoC

OrionProtocol 重入攻擊分析附PoC

OrionProtocol 重入攻擊分析附PoC

OrionProtocol 重入攻擊分析附PoC

OrionProtocol 重入攻擊分析附PoC

OrionProtocol 重入攻擊分析附PoC

安全建議

針對此類攻擊,建議項目方在設計合約時應考慮以下幾點:

  1. 全面評估多種Token和兌換路徑可能帶來的安全風險。
  2. 遵循"先判斷,後寫入變量,再進行外部調用"的編碼規範(Checks-Effects-Interactions模式)。
  3. 在實現代幣兌換功能時,特別注意防範重入攻擊。
  4. 定期進行代碼審計,及時發現並修復潛在漏洞。
  5. 考慮實施交易金額限制或其他風險控制措施。

此次事件再次強調了智能合約安全的重要性。項目方應持續關注合約安全,採取積極措施保護用戶資產,以維護整個Web3生態系統的健康發展。

TOKEN3.4%
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 6
  • 分享
留言
0/400
SybilSlayervip
· 07-28 15:34
又是重入 真无聊
回復0
薄饼吃不起vip
· 07-28 11:05
又是合约漏洞 服了
回復0
GateUser-26d7f434vip
· 07-25 18:03
怕是要跑路喽~
回復0
鱿鱼丝加班狗vip
· 07-25 17:55
又是合约被薅羊毛 看麻了
回復0
BrokenYieldvip
· 07-25 17:55
又是一天,又是一个去中心化金融黑客事件…… 协议漏洞从不休眠
查看原文回復0
SerumSquirrelvip
· 07-25 17:40
又一个牺牲品跑路了~
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)