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

robot
摘要生成中

OrionProtocol遭受重入攻擊事件分析

2023年2月2日15:40:20(UTC時間),以太坊和幣安智能鏈上的OrionProtocol因合約漏洞遭到重入攻擊。攻擊者成功竊取了約290萬美元的資金,其中包括以太坊上的2,844,766 USDT和幣安智能鏈上的191,606 BUSD。

OrionProtocol 重入攻擊分析附PoC

攻擊過程分析

攻擊者首先部署了一個自定義Token合約,並進行了相關的轉移和授權操作,爲後續的攻擊做好準備。隨後,攻擊者通過Uniswap V2的swap函數進行借貸,並調用OrionProtocol的ExchangeWithAtomic.swapThroughOrionPool方法進行代幣兌換。

兌換路徑設置爲[USDC, 攻擊者Token, USDT],其中攻擊者Token是關鍵。在兌換過程中,由於這個自定義Token合約中包含回調功能,攻擊者能夠在Token轉帳時觸發ExchangeWithAtomic.depositAsset方法,從而實現重入攻擊。這導致存款金額被錯誤累加,最終攻擊者通過取款操作完成了獲利。

OrionProtocol 重入攻擊分析附PoC

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

OrionProtocol 重入攻擊分析附PoC

OrionProtocol 重入攻擊分析附PoC

防範建議

  1. 遵循"檢查-效果-交互"(Checks-Effects-Interactions)模式:在執行外部調用前先更新合約狀態。

  2. 使用重入鎖:在敏感操作開始前加鎖,結束後解鎖,防止重入。

  3. 全面考慮各種代幣和兌換路徑:在設計兌換功能時,需要考慮到各種可能的情況和邊界條件。

  4. 限制單次交易金額:設置合理的交易限額,降低潛在損失。

  5. 定期進行安全審計:聘請專業的安全團隊對合約進行全面審計,及時發現並修復潛在漏洞。

  6. 實施多重籤名機制:關鍵操作需要多方確認,增加攻擊難度。

  7. 優化代碼邏輯:確保在更新關鍵狀態變量後才進行外部調用。

  8. 增加應急響應機制:制定完善的應急預案,在發生攻擊時能夠迅速反應,最小化損失。

本次事件再次強調了智能合約安全的重要性。項目方需要在開發過程中時刻保持警惕,採取全面的安全措施,以保護用戶資產和項目聲譽。同時,這也提醒投資者要謹慎選擇項目,關注項目的安全性和技術實力。

TOKEN-3.1%
查看原文
此頁面可能包含第三方內容,僅供參考(非陳述或保證),不應被視為 Gate 認可其觀點表述,也不得被視為財務或專業建議。詳見聲明
  • 讚賞
  • 5
  • 分享
留言
0/400
佛系矿工ervip
· 23小時前
合约安全还得看审计呀
回復0
DAOplomacyvip
· 23小時前
又一次次优治理失败,真是无奈...
查看原文回復0
GweiTooHighvip
· 23小時前
又一个割韭菜的
回復0
DeFiAlchemistvip
· 23小時前
*调整虚幻护目镜* 又一个灵魂堕入重返的黑暗艺术……协议的神秘屏障太弱了
查看原文回復0
PessimisticLayervip
· 23小時前
又300w?小意思啦
回復0
交易,隨時隨地
qrCode
掃碼下載 Gate APP
社群列表
繁體中文
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)