又一起重入漏洞?解析Stars Arena被攻擊事件

  • 事件概述:2023年10月7日,Avalanche鏈上社交協議Stars Arena遭重入漏洞攻擊,損失約290萬美元。攻擊者透過操縱合約價格計算邏輯竊取資金。

  • 攻擊手法

    • 攻擊者利用重入漏洞,在存款與賣出份額時篡改價格計算依賴,繞過合約檢查機制。
    • 透過攻擊合約(0x7f283、0xdd9af)呼叫Stars Arena合約的特定方法(如0xe9ccf3a3),並在外部呼叫中惡意建構參數(如修改為91000000000),影響後續價格計算。
    • 關鍵漏洞位於合約未防重入的low-level call(如0x30ef方法),導致狀態更新前參數已被惡意修改。
  • 交易分析

    • 攻擊者先存入1枚AVAX,觸發重入並操控價格參數,後續賣出份額時因價格被惡意計算,獲利266,102.97278枚AVAX。
    • 核心問題在於合約未遵循「Checks-Effects-Interactions」編碼規範,且缺乏防重入鎖。
  • 安全建議

    • 專案方應進行多重安全審計,並在編碼時加入防重入鎖。
    • 遵循嚴格的狀態更新順序,避免外部呼叫影響關鍵參數。
總結

背景

據慢霧MistEye 系統安全預警,2023 年10 月7 日,Avalanche 鏈上社交協議Stars Arena 遭攻擊,損失約290 萬美元。慢霧安全團隊簡析該攻擊事件並將結果分享如下。

相關資訊

攻擊者地址:

https://snowtrace.io/address/0xa2ebf3fcd757e9be1e58b643b6b5077d11b4ad7a

攻擊合約:

https://snowtrace.io/address/0x7f283edc5ec7163de234e6a97fdfb16ff2d2c7ac

https://snowtrace.io/address/dd9afc0e3c43951659c8ebe7aef9ee40879863ea

攻擊交易:

https://snowtrace.io/tx/0x4f37ffecdad598f53b8d5a2d9df98e3c00fbda4328585eb9947a412b5fe17ac5

攻擊核心

攻擊者利用重入漏洞,篡改自己存款份額所對應的價格。隨後在賣出時,又因該惡意操縱的價格計算依賴,導致類似的價格操控。透過精確計算重入時更新的份額價格,攻擊者竊取了合約中的資金。

交易分析

我們可以發現攻擊交易中存在一筆重入調用,我們透過反編譯程式碼逐步分析調用方式。

又一起重入漏洞?解析Stars Arena被攻擊事件

攻擊者先創造攻擊合約(0x7f283 和0xdd9af),透過攻擊合約呼叫Stars Arena: Shares 合約的0xe9ccf3a3 方法,然後存入1 枚AVAX 代幣。

又一起重入漏洞?解析Stars Arena被攻擊事件

根據反編譯後的程式碼一步步跟踪,攻擊者首先使用的0xe9ccf3a3 方法是一個類似於存款的函數,其中會呼叫0x326c 和0x2058 方法。 0x326c 方法僅作為參數返回的調用,而0x2058 方法類似於一個處理某種代幣購買或交換的函數,該方法透過0xe9ccf3a3 所傳入的AVAX 代幣數額及地址來進行下一步操作及份額和費用的下一步計算。

又一起重入漏洞?解析Stars Arena被攻擊事件

跟進0x2058 方法第92 行的呼叫邏輯,可以發現0x1a9b 方法為一個計算函數,計算出的結果是一個類似價格的值,其傳回值為新計算的v24 / 0xde0b6b3a7640000 或是_initialPrice。

之後的109 行,110 行及116 行的0x307c 和0x30ef 方法中就存在low-level call 的調用,而0x30ef 的call 還是對varg1 也就是傳入的0xdd9af 攻擊合約位址的外部調用。函數沒有防重入鎖的約束,執行完外部呼叫後,此方法才會向下執行之後的if 判斷來更新field0.length 及field0 參數。毫無疑問,重入就是在此發生的。

又一起重入漏洞?解析Stars Arena被攻擊事件

我們再來看攻擊者在重入呼叫中所建構的資料。

又一起重入漏洞?解析Stars Arena被攻擊事件

重入外部呼叫的是0x5632b2e4 方法,並傳入攻擊者所建構的4 個參數,這些參數透過進位轉換153005ce00 為910000000000。

如同上面所講到的,對0x5632b2e4 方法的外部呼叫是執行在if (varg0 == _getMyShares[address(varg1)][msg.sender]) 判斷之前。這時field0.lengt 值為0, 並未更新。攻擊者正好透過這個方式繞過0x5632b2e4 方法中的判斷,將msg.sender 也就是攻擊合約0xdd9af 的以下4 個參數狀態都修改為了外部呼叫是時建構的資料。

又一起重入漏洞?解析Stars Arena被攻擊事件

經過以上操作之後,攻擊者調用了sellShares 來賣出自己的份額,獲得了266,102.97278 枚AVAX。

又一起重入漏洞?解析Stars Arena被攻擊事件

深入sellShares 函數,函數起先就調用了0x1a9b 方法,而在之前的0x2058 方法中就曾存在調用,是處理某種代幣購買或交換的函數。我們可以發現,在0x1a9b 方法中的0x2329 方法會更新owner_9f[varg0],而這個參數在重入時就已經被修改為攻擊者所建構的91000000000。

又一起重入漏洞?解析Stars Arena被攻擊事件

回到0x1a9b 方法中,根據先前惡意建構的值重新計算(計算金額見註)。

又一起重入漏洞?解析Stars Arena被攻擊事件

經過以上計算,新計算出的份額所對應的價格發生了改變,計算出的結果為274,333.061476814e18。再經過一系列的費用收取後,攻擊者在沒有修改份額的情況下使用惡意構造操縱的價格,賣出份額,成功獲利。

總結

本次攻擊的核心在於重入攻擊所造成的價格運算依賴更新,進而導致了類似惡意價格操控。慢霧安全團隊建議專案方應盡可能在經過多家安全公司審計後,再進行合約的部署發布;同時在編碼時應盡可能滿足Checks-Effects-Interactions 編碼規範,並添加防重入鎖。

分享至:

作者:慢雾科技

本文為PANews入駐專欄作者的觀點,不代表PANews立場,不承擔法律責任。

文章及觀點也不構成投資意見

圖片來源:慢雾科技如有侵權,請聯絡作者刪除。

關注PANews官方賬號,一起穿越牛熊
推薦閱讀
1小時前
3小時前
4小時前
5小時前
5小時前
5小時前

熱門文章

行業要聞
市場熱點
精選讀物

精選專題

App内阅读