OrionProtocol遭重入攻擊 290萬美元損失深度剖析

robot
摘要生成中

OrionProtocol遭受重入攻擊事件分析

2023年2月2日下午,以太坊和幣安智能鏈上的OrionProtocol項目因合約漏洞遭到重入攻擊。攻擊者從以太坊鏈上竊取了約284萬USDT,從幣安智能鏈上竊取了約19萬BUSD,總損失價值約290萬美元。

攻擊過程分析

攻擊者首先部署了一個自定義Token合約,並進行了一系列準備工作。隨後,攻擊者通過某DEX的swap功能借入資金,調用OrionProtocol的ExchangeWithAtomic.swapThroughOrionPool方法進行代幣兌換。兌換路徑中包含了攻擊者創建的Token合約地址。

在兌換過程中,攻擊者利用自定義Token合約的回調功能,重復調用ExchangeWithAtomic.depositAsset方法,導致存款金額被多次累加。最終,攻擊者通過提款操作完成了獲利。

OrionProtocol 重入攻擊分析附PoC

資金流向

據追蹤,攻擊者的初始資金來自某交易平台的熱錢包。攻擊獲利的1651個ETH中,約657.5個仍留在攻擊者錢包地址,其餘已通過混幣服務轉移。

OrionProtocol 重入攻擊分析附PoC

漏洞分析

核心問題出在ExchangeWithAtomic合約的doSwapThroughOrionPool函數中。該函數在執行代幣轉帳後更新curBalance變量,這爲攻擊者創造了重入的機會。攻擊者通過在自定義Token的transfer函數中添加回調邏輯,反復調用depositAsset函數,導致curBalance被錯誤更新。

攻擊者利用這一漏洞,在償還閃電貸後成功提取了超額資金。

OrionProtocol 重入攻擊分析附PoC

OrionProtocol 重入攻擊分析附PoC

OrionProtocol 重入攻擊分析附PoC

攻擊復現

研究人員提供了部分PoC代碼,模擬了攻擊過程。代碼包括創建自定義Token、建立流動性池、授權操作以及執行攻擊等步驟。測試結果顯示,攻擊復現成功,與實際攻擊的調用棧結果一致。

OrionProtocol 重入攻擊分析附PoC

OrionProtocol 重入攻擊分析附PoC

OrionProtocol 重入攻擊分析附PoC

OrionProtocol 重入攻擊分析附PoC

OrionProtocol 重入攻擊分析附PoC

OrionProtocol 重入攻擊分析附PoC

安全建議

  1. 合約設計中需考慮多種Token和兌換路徑可能帶來的安全隱患。

  2. 遵循"檢查-生效-交互"(Checks-Effects-Interactions)的編碼模式,即先進行條件檢查,然後更新狀態變量,最後再與外部合約交互。

  3. 在處理外部調用時應格外謹慎,尤其是涉及資金轉移的操作。

  4. 定期進行安全審計,及時發現並修復潛在漏洞。

  5. 實施合理的權限控制和限額機制,降低單次攻擊可能造成的損失。

本次事件再次提醒Web3項目開發團隊,在追求創新的同時務必重視智能合約的安全性。唯有構建更加安全、可靠的基礎設施,才能推動整個行業的健康發展。

查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 8
  • 分享
留言
0/400
ShadowStakervip
· 07-08 21:29
又一天,又一个DeFi漏洞……开发者们什么时候才能学会检查重入性,真是无奈。
查看原文回復0
Token Therapistvip
· 07-07 15:54
又一个倒了
回復0
GasWasterrvip
· 07-06 14:26
又双叒叕被盗了
回復0
SigmaBrainvip
· 07-05 22:13
又是重入攻击 这架势破防了
回復0
ponzi_poetvip
· 07-05 22:13
安全性呢?都去哪了?
回復0
暴富型韭菜vip
· 07-05 22:13
前排吃瓜 合约审计都搞不好 亏惨
回復0
熊市种菜人vip
· 07-05 22:07
合约又炸了 哎
回復0
DAO治理专员vip
· 07-05 22:00
*叹气* 从经验上讲,这些黑客攻击中有99%源于基本的状态管理疏忽...
查看原文回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)