事件背景
零時科技區塊鍊安全情報平台監控到消息,中原標準時間2023年2月3日,BSC鍊與ETH鍊上Orion Protocol受到黑客攻擊,攻擊者獲利約300萬美元,攻擊者位址為0x837962b686fd5a407fb4e5f92e8be86a230484bd,被盜資金已轉移至Tornado.Cash混币平台。零時科技安全團隊及時對此安全事件進行分析。
漏洞及核心
Orion Protocol是一個交易聚合協定,使用者可以進行代币交易,兌換以及跨鍊操作等。此處以BSC鍊攻擊交易為例。
攻擊者執行兌換操作,其中路徑1代币由攻擊者控制。
在執行第一次兌換後,轉入攻擊者構造的惡意合約中進行代币轉賬,轉賬函數由攻擊者惡意構造,在惡意構造的轉賬函數中攻擊者将通過閃電貸獲得的191,606 USDT 調用ExchangeWithAtomic合約中depositAsset函數存入合約中,此時修改了assetBalances變量的值,但是在最終轉賬時并沒有執行assetBalances變量的修改。
計算最終兌換代币數值是由目前代币餘額減去執行兌換之前合約對應代币餘額
由于在執行兌換過程中攻擊者已經向合約轉移大筆資金,是以攻擊者兌換出的USDT資金變多
兌換前餘額
執行兌換操作後餘額
攻擊者在此次兌換中使用1USDC共兌換出191,606 USDT
由于攻擊者此前執行了depositAsset函數操作,但是兌換完成時并沒有涉及到此函數中變量,攻擊者仍可以通過調用withdraw函數取出之前通過depositAsset函數存入的資金。
資金來源及去向
- 資金來源
ETH鍊攻擊位址資金來源為Bianace15交易所
BSC鍊攻擊位址資金來源為Tornado.Cash混币平台
- 資金流向
BSC鍊被盜資金通過跨鍊全部轉移至ETH鍊攻擊者位址
ETH鍊将被盜資金兌換為ETH共1100 ETH轉移至 Tornado.Cash混币平台
總結及建議
此次攻擊是由于ExchangeWithAtomic合約中對于合約内不同函數間的重入未做限定,使得攻擊者能夠通過調用構造的惡意合約實作重入操作,且合約中代币兌換後轉出資金計算方式隻受合約代币餘額影響,是以攻擊者在執行兌換時通過調用其他函數轉入資金影響合約餘額後将轉入的資金取出實作獲利。
安全建議
- 建議對合約中涉及資金轉移函數添加防重入機制保護,避免攻擊者通過控制惡意合約進行攻擊
- 建議項目方上線前進行多次審計,避免出現審計步驟缺失