Sui链上Nemo合约漏洞遭黑客利用,259万美元资产被盗引发安全警示
事件概述:
北京时间 2025 年 9 月 7 日,Sui 链上的 Nemo 协议遭到黑客攻击,攻击者通过操控 py_index 参数窃取了约 259 万美元的资产。
攻击者地址:
0x01229b3cc8469779d42d59cfc18141e4b13566b581787bf16eb5d61058c1c724
攻击交易链接:
https://suivision.xyz/txblock/HMMicxQWn 43 rnNswi 4 gNHanUaeiWW 5 ijqM 5 bHLca 67 D 9?tab=Overview
Nemo 智能合约包地址:
0x0f286ad004ea93ea6ad3a953b5d4f3c7306378b0dcc354c3f4ebb1d506d3b47f
根本原因:
本次 Nemo 被攻击的根本原因是 PyState 错误地设置为可变引用,导致攻击者可以恶意修改 py_index。在调用 mint_py 函数时,攻击者通过 py_index 与分离出的 SY 参数相乘,生成大量 PT 和 YT。
经过深入分析发现,在 py.get_sy_amount_in_for_exact_py_out 函数调用 py.current_py_index 时,允许传入一个毫无约束的数来修改 pyState 的 py_index 字段。
·py.get_sy_amount_in_for_exact_py_out 计算出 PY 输出所需的 SY 输入量,然而这里的 index 没有任何限制。
·py.current_py_index 将传入的 py_index 和存储的 index 进行比较,返回最大的值作为 py_state.py_index_stored 的最新值。
攻击过程分析:
1. 攻击者首先调用 init_py_position 函数初始化一个 py_position(该步骤为用户仓位记录初始化,与攻击核心无关)。
2. 接着,攻击者利用闪电贷功能 py.borrow_pt_amount 借出大量 PT 代币(后续通过 swap 操作换取 SY 余额)。
3. 攻击者调用 market.swap_exact_pt_for_sy 100 次,将借来的 PT 兑换为 SY 代币。
4. 攻击者通过 py.get_sy_amount_in_for_exact_py_out 计算 PY 输出所需的 SY 输入量,并在此过程中传入一个构造的极大数值 553402322211286548480000,破坏了原定逻辑。
5. 随后,攻击者利用被异常放大的指数,在调用 yield_factory.mint_py 时以畸高的折扣利率铸造 PT 和 YT,从而套取大量 PT。
MintEvent 如下:
6. 最后,攻击者使用铸造的 PT 通过 py.repay_pt_amount 偿还债务,并通过 redeem 赎回收益型资产,最终在 Scallop 中提取代币。
至此,攻击者通过操作 py_index 窃取了约 259 万美元的资产,并将其转换为 USDC 后跨链转移,最终存入地址 0x41b1906c4BCded607c6b02861cE15C2E49FF7576。
事件发生后,Nemo 团队紧急暂停了智能合约的功能并展开调查。调查结果显示,此次攻击的原因是新功能在未充分审计的情况下上线。
事件总结:
本次攻击的核心在于敏感数据错误地设置为可写状态,使攻击者能够自由传入参数进行篡改。对于关键数据的状态管理,应在设计和审计时严格限制其访问权限,并实施全面的安全检查。
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代币币情的观点或立场