Nemo 合約安全漏洞致 259 萬美元被盜,Sui 鏈上資產安全再敲警鐘
事件概述:
北京時間2025年9月7日,Sui鏈上的 Nemo 被攻擊,黑客通過操作py_index以竊取約259萬美元。


Attacker Address:
0x01229b3cc8469779d42d59cfc18141e4b13566b581787bf16eb5d61058c1c724
Attack Transaction:
https://suivision.xyz/txblock/HMMicxQWn43rnNswi4gNHanUaeiWW5ijqM5bHLca67D9?tab=Overview
Nemo Package:
0x0f286ad004ea93ea6ad3a953b5d4f3c7306378b0dcc354c3f4ebb1d506d3b47f
根本原因:
此次Nemo被盜根本原因是PyState錯誤地設置為可變引用,導致攻擊者可以惡意修改pyindex,在調用mintpy函數時通過py_index與分離出SY參數相乘得到大量的PT和YT。
經過深入分析發現,在py.getsyamountinforexactpyout 函數調用 py.currentpyindex時允許傳入一個毫無約束的數用於修改 pyState 的 pyindex 字段。
·py.getsyamountinforexactpy_out計算出PY輸出所需要的SY的輸入量,然而這裡index沒有任何限制

·py.currentpyindex將傳入的pyindex和存儲的index比較,返回最大的作為pystate.pyindexstored的最新值

攻擊過程分析
1.攻擊者調用 initpyposition 函數初始化一個 py_position(初始化用戶的倉位記錄,與本次攻擊無關)。

2.接著利用閃電貸 py.borrowptamount 借出大量PT代幣(後續通過swap換取SY餘額)。

3.調用100次market.swapexactptforsy將PT兌換成SY代幣。

4.通過py.getsyamountinforexactpyout計算出PY輸出所需要的SY的輸入量,這裡攻擊者將pyindex傳入一個構造的極大的數553402322211286548480000,破壞了原本的結構。

5.接著攻擊者利用被異常放大的指數,在調用 yieldfactory.mintpy 時,以畸高的折扣利率鑄造 PT 與 YT,從而套取大量 PT。

MintEvent如下:

6.最後攻擊者使用鑄造的PT通過 py.repayptamount 償還債務,然後通過redeem贖回收益型資產,並在Scallop中提取代幣。
至此攻擊者通過操作 py_index 已盜取約259萬美元,之後將資產轉換為USDC並通過Bridge進行跨鏈轉移,最終轉換為ETH和DAI存儲在 0x41b1906c4BCded607c6b02861cE15C2E49FF7576。
在攻擊發生後Nemo團隊緊急暫停了智能合約功能,並開始調查攻擊事件。調查結果表明259萬美元資產損失攻擊源於在未充分審計的情況下上線新功能。
事件總結:
此次攻擊的核心在於將敏感數據錯誤的設置為可寫狀態導致攻擊者可以自由傳入參數並進行修改,對於敏感數據的狀態應做好嚴格限制和檢查。







