Nemo契約のセキュリティ脆弱性により259万ドルが盗まれ、Suiチェーン上の資産の安全性が再び警鐘を鳴らす。
イベント概要:
北京時間2025年9月7日、Suiチェーン上のNemoが攻撃され、ハッカーはpy_indexを操作して約259万ドルを盗みました。


攻撃者アドレス:
0x01229b3cc8469779d42d59cfc18141e4b13566b581787bf16eb5d61058c1c724
攻撃トランザクション:
https://suivision.xyz/txblock/HMMicxQWn43rnNswi4gNHanUaeiWW5ijqM5bHLca67D9?tab=Overview
Nemoパッケージ:
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の最新値として返します。

攻撃プロセス分析:
- 攻撃者はinitpyposition関数を呼び出してpy_positionを初期化します(ユーザーのポジション記録を初期化し、この攻撃とは無関係です)。

- 次に、フラッシュローンpy.borrowptamountを利用して大量のPTトークンを借り出します(その後、swapを通じてSY残高に交換します)。

- 100回market.swapexactptforsyを呼び出してPTをSYトークンに交換します。

- py.getsyamountinforexactpyoutを通じてPY出力に必要なSYの入力量を計算しますが、ここで攻撃者はpyindexに構築された非常に大きな数553402322211286548480000を渡し、元の構造を破壊しました。

- 次に、攻撃者は異常に拡大された指数を利用して、yieldfactory.mintpyを呼び出す際に、非常に高い割引率でPTとYTを鋳造し、大量のPTを取得しました。

MintEventは以下の通りです:

- 最後に、攻撃者は鋳造したPTを使用してpy.repayptamountで債務を返済し、redeemを通じて収益型資産を引き出し、Scallopでトークンを引き出します。
これにより、攻撃者はpy_indexを操作して約259万ドルを盗み、その後、資産をUSDCに変換し、Bridgeを通じてクロスチェーン転送を行い、最終的にETHとDAIに変換して0x41b1906c4BCded607c6b02861cE15C2E49FF7576に保存しました。
攻撃発生後、Nemoチームは緊急にスマートコントラクト機能を停止し、攻撃事件の調査を開始しました。調査結果は、259万ドルの資産損失が十分に監査されていない状態で新機能が導入されたことに起因していることを示しています。
事件のまとめ:
今回の攻撃の核心は、敏感なデータが誤って書き込み可能な状態に設定されたため、攻撃者が自由にパラメータを渡して変更できたことです。敏感なデータの状態については、厳格な制限とチェックを行う必要があります。














