hanyvert/sui-txblock-deser-poc

GitHub: hanyvert/sui-txblock-deser-poc

该项目是针对 Sui SDK 中 TransactionBlock 反序列化漏洞的概念验证,揭示了攻击者如何通过篡改序列化交易在用户不知情下重定向资金。

Stars: 1 | Forks: 0

# @mysten/sui.js TransactionBlock 反序列化 PoC ## 摘要 `@mysten/sui.js` `<1.0` 版本中存在一个类型混淆漏洞,允许攻击者构造一个序列化的 `TransactionBlock`,该区块表面上看起来是将资金转移到发送者的地址,但在反序列化之后,会将资金重定向到攻击者控制的地址。 ## 漏洞详情 **受影响的包:** `@mysten/sui.js` `0.x` 版本(直至 `0.54.1` 的所有版本) **修复版本:** `@mysten/sui` `>=1.0.0`(注意:包已更名) `TransactionBlock` 类将命令序列化为带有符号引用(`GasCoin`、`Input`、`Result`)的 JSON。`Pure` 输入类型将地址值存储为原始字节数组,且没有绑定验证。在反序列化期间,修改后的 `Pure` 值会被直接接受,而不会重新验证其是否与原始意图相符。 ### 攻击场景 1. 攻击者伪造一个 dApp 交互(或恶意的 WalletConnect 会话),呈现一个显示如下内容的 `TransactionBlock`: SplitCoins(GasCoin, [amount]) → TransferObjects([coin], victim_address) 2. 钱包 UI 渲染出易于人类理解的意图:“发送 X SUI 给你自己” 3. 实际签名交易中的 `Pure` 输入已被替换为: TransferObjects([coin], attacker_address) 4. 由于 `@mysten/dapp-kit` 中的 `signAndExecuteTransactionBlock` 是对序列化字节进行签名(而非显示的意图),因此钱包会对攻击者的版本进行签名。 ### 根本原因 在 `@mysten/sui.js/transactions` 中,`TransactionBlock.from()` 在反序列化时缺乏以下验证: - 输入的 `Pure` 值与其原始来源是否一致 - 地址输入与声明的发送者是否一致 - 跨越序列化/反序列化边界的 `GasCoin` 绑定一致性 v1.0 重写版本(`@mysten/sui`)使用 `Transaction` 替换了 `TransactionBlock`,并使用了具有更严格类型验证的 BCS 原生序列化。 ## 影响 - **受影响的应用程序:** 任何使用 `@mysten/sui.js` 0.x 及 `signAndExecuteTransactionBlock` 的 dApp - **攻击向量:** 恶意 dApp、被入侵的 WalletConnect 中继,或针对 RPC 的中间人攻击 (MITM) - **结果:** 在钱包显示合法收款人的同时,将 SUI/代币转移至攻击者地址 - **注意:** 显示原始字节(而非解析后意图)的硬件钱包不受影响 ## 复现 ``` git clone https://github.com/hanyvert/sui-txblock-deser-poc cd sui-txblock-deser-poc npm install npm test # serialization analysis (offline, no network) npm run poc # on-chain tx pattern analysis (read-only, mainnet) ``` ### 测试输出 该测试检查三个反序列化属性: 1. **基础往返测试** — 序列化后的输入是否保持可变性 2. **输入替换** — 地址 Pure 值是否可以被替换 3. **GasCoin 引用** — GasCoin 符号绑定是否经过验证 ## 修复 从 `@mysten/sui.js` 升级至 `@mysten/sui` >= 1.0: ``` npm uninstall @mysten/sui.js npm install @mysten/sui ``` 迁移指南:https://sdk.mystenlabs.com/typescript/migrations/sui-1.0 ## 负责任的漏洞披露 本报告在发布前已私下分享给受影响的项目维护者。如果您确认该问题影响了您的部署,我希望能与您协调披露时间。 ## 参考 - [@mysten/sui v1.0 迁移指南](https://sdk.mystenlabs.com/typescript/migrations/sui-1.0) - [Sui TypeScript SDK 更新日志](https://github.com/MystenLabs/sui/blob/main/sdk/typescript/CHANGELOG.md) - [BCS 序列化规范](https://docs.sui.io/concepts/sui-move-concepts/collections#bcs-serialization)
标签:Maven, MITM代理, PoC, Sui, 区块链安全, 暗色界面, 暴力破解, 漏洞验证, 类型混淆, 自动化攻击