OrionProtocol遭重入攻擊 損失290萬美元資產

robot
摘要生成中

OrionProtocol 遭受重入攻擊事件分析

2023年2月2日下午,以太坊和幣安智能鏈上的OrionProtocol項目因合約漏洞遭受重入攻擊,總計損失約290萬美元的資產,其中包括以太坊上2,844,766 USDT和幣安智能鏈上191,606 BUSD。

OrionProtocol 重入攻擊分析附PoC

攻擊過程分析

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

在兌換過程中,由於攻擊者的Token合約中包含回調邏輯,導致在轉帳操作時觸發了對ExchangeWithAtomic.depositAsset方法的重復調用。這種重入攻擊使得存款金額被反復累加,最終攻擊者通過提款操作獲取了超出正常額度的資金。

OrionProtocol 重入攻擊分析附PoC

資金流向

攻擊者的初始資金來源於某交易平台的熱錢包。攻擊獲利的1,651個ETH中,657.5個ETH仍留在攻擊者的錢包地址中,其餘部分已經通過混幣工具進行了轉移。

OrionProtocol 重入攻擊分析附PoC

漏洞分析

攻擊的核心問題出在ExchangeWithAtomic合約的doSwapThroughOrionPool函數中。該函數在處理代幣兌換時,沒有正確處理可能出現的重入情況。具體來說,在_doSwapTokens函數中,代幣轉帳操作後才更新curBalance變量,這爲攻擊者提供了可乘之機。

攻擊者通過在自定義Token的transfer函數中添加回調邏輯,在每次轉帳時觸發depositAsset函數的調用,導致curBalance變量被錯誤更新。最終,攻擊者在歸還閃電貸後,通過withdraw函數提取了超額資金。

OrionProtocol 重入攻擊分析附PoC

OrionProtocol 重入攻擊分析附PoC

OrionProtocol 重入攻擊分析附PoC

OrionProtocol 重入攻擊分析附PoC

OrionProtocol 重入攻擊分析附PoC

漏洞復現

研究人員提供了部分POC代碼,展示了如何利用該漏洞進行攻擊。代碼主要模擬了攻擊者的操作流程,包括創建僞造Token、設置流動性池、進行閃電貸和重入攻擊等步驟。

OrionProtocol 重入攻擊分析附PoC

OrionProtocol 重入攻擊分析附PoC

OrionProtocol 重入攻擊分析附PoC

安全建議

爲避免類似攻擊,項目方在設計合約時應注意以下幾點:

  1. 在實現代幣兌換功能時,需要考慮各種Token類型和兌換路徑可能帶來的潛在風險。

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

  3. 使用重入鎖或其他防重入機制來保護關鍵函數。

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

  5. 考慮引入交易金額限制或交易頻率限制,以降低潛在攻擊的影響。

通過採取這些措施,項目可以顯著提高合約安全性,減少被攻擊的風險。在Web3生態系統中,安全始終應該是首要考慮因素。

查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 5
  • 分享
留言
0/400
WalletWhisperervip
· 5小時前
另一个教科书式的重入模式……说实话,统计上是不可避免的
查看原文回復0
梦游交易者vip
· 07-18 01:18
又一个合约小白挨揍了
回復0
稳定币爱好者vip
· 07-18 01:17
又被搞跑了 不长记性啊
回復0
暴富型韭菜vip
· 07-18 00:54
日常被合约薅羊毛 哈哈哈哈
回復0
Meme复读机vip
· 07-18 00:52
又躺了啊 看来智能合约还是要认真写
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)