# OrionProtocol遭遇重入攻擊事件分析2023年2月2日15:40:20 UTC,以太坊和幣安智能鏈上的OrionProtocol因合約漏洞遭受重入攻擊。攻擊者從以太坊網路獲利2,844,766 USDT,從幣安智能鏈獲利191,606 BUSD,總損失約290萬美元。## 攻擊過程分析攻擊者首先部署了一個自定義Token合約,並進行了一系列準備工作。隨後,攻擊者通過某DEX的swap函數借入資金,並調用OrionProtocol的ExchangeWithAtomic.swapThroughOrionPool方法進行代幣兌換。兌換路徑包含了攻擊者創建的Token合約地址,這爲後續的回調攻擊埋下伏筆。在兌換過程中,由於攻擊者的Token合約中包含回調邏輯,每次轉帳都會觸發對ExchangeWithAtomic.depositAsset方法的重入調用。這導致存款金額被多次累加,最終攻擊者通過提款操作獲取超額利潤。## 資金流向攻擊者的初始資金來自某交易平台的熱錢包。在攻擊成功後,獲利的1,651 ETH中,657.5 ETH仍留在攻擊者的錢包地址,其餘部分已通過混幣服務進行轉移。## 漏洞分析漏洞的核心在於ExchangeWithAtomic合約的doSwapThroughOrionPool和_doSwapTokens函數。這些函數在執行代幣轉帳後才更新curBalance變量,給了攻擊者利用重入攻擊的機會。攻擊者通過在自定義Token的transfer函數中添加回調邏輯,導致curBalance被錯誤更新,從而在償還閃電貸後仍能提取額外資金。## 攻擊復現研究人員提供了部分POC代碼,模擬了攻擊過程。測試結果顯示,攻擊者成功利用合約漏洞獲取了額外的USDT。## 安全建議針對此類攻擊,建議項目方:1. 在合約中實現代幣兌換功能時,需考慮各種Token類型和兌換路徑可能帶來的安全風險。2. 嚴格遵循"檢查-生效-交互"(Checks-Effects-Interactions)的編碼模式,即先進行條件檢查,再更新狀態變量,最後執行外部調用。3. 在更新關鍵狀態變量前使用重入鎖或類似機制防止重入攻擊。4. 定期進行代碼審計和安全測試,及時發現並修復潛在漏洞。本次事件再次凸顯了智能合約安全的重要性。項目方應該持續關注安全問題,採取全面的防護措施,以確保用戶資產安全和項目的長期穩定發展。
OrionProtocol遭重入攻擊 損失約290萬美元
OrionProtocol遭遇重入攻擊事件分析
2023年2月2日15:40:20 UTC,以太坊和幣安智能鏈上的OrionProtocol因合約漏洞遭受重入攻擊。攻擊者從以太坊網路獲利2,844,766 USDT,從幣安智能鏈獲利191,606 BUSD,總損失約290萬美元。
攻擊過程分析
攻擊者首先部署了一個自定義Token合約,並進行了一系列準備工作。隨後,攻擊者通過某DEX的swap函數借入資金,並調用OrionProtocol的ExchangeWithAtomic.swapThroughOrionPool方法進行代幣兌換。兌換路徑包含了攻擊者創建的Token合約地址,這爲後續的回調攻擊埋下伏筆。
在兌換過程中,由於攻擊者的Token合約中包含回調邏輯,每次轉帳都會觸發對ExchangeWithAtomic.depositAsset方法的重入調用。這導致存款金額被多次累加,最終攻擊者通過提款操作獲取超額利潤。
資金流向
攻擊者的初始資金來自某交易平台的熱錢包。在攻擊成功後,獲利的1,651 ETH中,657.5 ETH仍留在攻擊者的錢包地址,其餘部分已通過混幣服務進行轉移。
漏洞分析
漏洞的核心在於ExchangeWithAtomic合約的doSwapThroughOrionPool和_doSwapTokens函數。這些函數在執行代幣轉帳後才更新curBalance變量,給了攻擊者利用重入攻擊的機會。攻擊者通過在自定義Token的transfer函數中添加回調邏輯,導致curBalance被錯誤更新,從而在償還閃電貸後仍能提取額外資金。
攻擊復現
研究人員提供了部分POC代碼,模擬了攻擊過程。測試結果顯示,攻擊者成功利用合約漏洞獲取了額外的USDT。
安全建議
針對此類攻擊,建議項目方:
本次事件再次凸顯了智能合約安全的重要性。項目方應該持續關注安全問題,採取全面的防護措施,以確保用戶資產安全和項目的長期穩定發展。