📢 Gate廣場 #NERO发帖挑战# 秀觀點贏大獎活動火熱開啓!
Gate NERO生態周來襲!發帖秀出NERO項目洞察和活動實用攻略,瓜分30,000NERO!
💰️ 15位優質發帖用戶 * 2,000枚NERO每人
如何參與:
1️⃣ 調研NERO項目
對NERO的基本面、社區治理、發展目標、代幣經濟模型等方面進行研究,分享你對項目的深度研究。
2️⃣ 參與並分享真實體驗
參與NERO生態周相關活動,並曬出你的參與截圖、收益圖或實用教程。可以是收益展示、簡明易懂的新手攻略、小竅門,也可以是行情點位分析,內容詳實優先。
3️⃣ 鼓勵帶新互動
如果你的帖子吸引到他人參與活動,或者有好友評論“已參與/已交易”,將大幅提升你的獲獎概率!
NERO熱門活動(帖文需附以下活動連結):
NERO Chain (NERO) 生態周:Gate 已上線 NERO 現貨交易,爲回饋平台用戶,HODLer Airdrop、Launchpool、CandyDrop、餘幣寶已上線 NERO,邀您體驗。參與攻略見公告:https://www.gate.com/announcements/article/46284
高質量帖子Tips:
教程越詳細、圖片越直觀、互動量越高,獲獎幾率越大!
市場見解獨到、真實參與經歷、有帶新互動者,評選將優先考慮。
帖子需原創,字數不少於250字,且需獲得至少3條有效互動
又一起重入漏洞? 解析Stars Arena被攻擊事件
背景
據慢霧 MistEye 系統安全預警,2023 年 10 月 7 日,Avalanche 鏈上社交協定 Stars Arena 遭攻擊,損失約 290 萬美元。 慢霧安全團隊簡析該攻擊事件並將結果分享如下。
相關信息
攻擊者位址:
攻擊合約:
攻擊交易:
攻擊核心
攻擊者利用重入漏洞,篡改自己存款份額所對應的價格。 隨後在賣出時,又因該惡意操縱的價格計算依賴,導致類似的價格操控。 通過精確計算重入時更新的份額價格,攻擊者竊取了合約中的資金。
交易分析
我們可以發現攻擊交易中存在一筆重入調用,我們通過反編譯代碼逐步分析調用方式。
! [又一起重入漏洞? 解析Stars Arena被攻擊事件](https://img-cdn.gateio.im/webp-social/moments-69a80767fe-98a298d9bb-dd1a6f-69ad2a.webp)
攻擊者先創建攻擊合約(0x7f283 和 0xdd9af),通過攻擊合約調用 Stars Arena: Shares 合約的 0xe9ccf3a3 方法,然後存入 1 枚 AVAX 代幣。
! [又一起重入漏洞? 解析Stars Arena被攻擊事件](https://img-cdn.gateio.im/webp-social/moments-69a80767fe-fccaa140dd-dd1a6f-69ad2a.webp)
根據反編譯後的代碼一步步跟蹤,攻擊者首先用的 0xe9ccf3a3 方法是一個類似於存款的函數,其中會調用 0x326c 和 0x2058 方法。 0x326c 方法僅作為參數返回的調用,而 0x2058 方法類似於一個處理某種代幣購買或交換的函數,該方法通過 0xe9ccf3a3 所傳入的 AVAX 代幣數額及地址來進行下一步操作及份額和費用的計算。
! [又一起重入漏洞? 解析Stars Arena被攻擊事件](https://img-cdn.gateio.im/webp-social/moments-69a80767fe-9279aef172-dd1a6f-69ad2a.webp)
跟進 0x2058 方法第 92 行的調用邏輯,可以發現 0x1a9b 方法為一個計算函數,計算出的結果是一個類似於價格的值,其返回值為新計算出的 v24 / 0xde0b6b3a7640000 或者是 _initialPrice。
之後的 109 行,110 行及 116 行的 0x307c 和 0x30ef 方法中就存在 low-level call 的調用,而 0x30ef 的 call 還是對 g1 也就是傳入的 0xdd9af 攻擊合約地址的外部調用。 函數沒有防重入鎖的約束,並且在執行完外部調用后,此方法才會向下執行之後的 if 判斷來更新 field0.length 及 field0 參數。 毫無疑問,重入就是在此處發生的。
! [又一起重入漏洞? 解析Stars Arena被攻擊事件](https://img-cdn.gateio.im/webp-social/moments-69a80767fe-3c9611d0bb-dd1a6f-69ad2a.webp)
我們再來看攻擊者在重入調用中構造的數據。
! [又一起重入漏洞? 解析Stars Arena被攻擊事件](https://img-cdn.gateio.im/webp-social/moments-69a80767fe-ce911c42e9-dd1a6f-69ad2a.webp)
重入外部調用的是 0x5632b2e4 方法,並傳入攻擊者所構造的的 4 個參數,這些參數通過進位轉化 153005ce00 為 91000000000。
正如上面講到的,對 0x5632b2e4 方法的外部調用是執行在 if (g0 == _getMyShares[address(g1)][msg.sender]) 判斷之前。 這時 field0.lengt 值為 0, 並未更新。 攻擊者正好通過這個方式繞過 0x5632b2e4 方法中的判斷,將 msg.sender 也就是攻擊合約 0xdd9af 的以下 4 個參數狀態都修改為了外部調用是時構造的數據。
! [又一起重入漏洞? 解析Stars Arena被攻擊事件](https://img-cdn.gateio.im/webp-social/moments-69a80767fe-53695512db-dd1a6f-69ad2a.webp)
通過以上操作之後,攻擊者調用了 sellShares 來賣出自己的份額,獲得了 266,102.97278 枚 AVAX。
! [又一起重入漏洞? 解析Stars Arena被攻擊事件](https://img-cdn.gateio.im/webp-social/moments-69a80767fe-54e5a2f231-dd1a6f-69ad2a.webp)
深入 sellShares 函數,函數起先就調用了 0x1a9b 方法,而在之前的 0x2058 方法中就曾存在調用,是處理某種代幣購買或交換的函數。 我們可以發現,在 0x1a9b 方法中的 0x2329 方法會更新 owner_9f[g0] ,而這個參數在重入時就已經被修改為攻擊者所構造的 91000000000。
! [又一起重入漏洞? 解析Stars Arena被攻擊事件](https://img-cdn.gateio.im/webp-social/moments-69a80767fe-60823d09ab-dd1a6f-69ad2a.webp)
回到 0x1a9b 方法中,根據之前惡意構造的值重新計算(計算數額見註釋)。
! [又一起重入漏洞? 解析Stars Arena被攻擊事件](https://img-cdn.gateio.im/webp-social/moments-69a80767fe-764b869b64-dd1a6f-69ad2a.webp)
經過以上計算,新計算出的份額所對應的價格發生了改變,計算出的結果為 274,333.061476814e18。 再經過一系列的費用收取過後,攻擊者在沒有修改份額的情況下使用惡意構造操縱的價格,賣出份額,成功獲利。
總結
本次攻擊的核心在於重入攻擊所造成的價格計算依賴更新,進而導致了類似惡意價格操控。 慢霧安全團隊建議專案方應儘可能在經過多家安全公司審計后,再進行合約的部署發佈; 同時在編碼時應儘可能滿足 Checks-Effects-Interactions 編碼規範,添加防重入鎖。