BitsLab 旗下 MoveBit 团队发现并协助修复 Sui 跨链协议高危漏洞
2024-10-09 18:09

在今年四月,MoveBit 安全研究团队通过 HackenProof [1]平台向 Sui 提交了一个高危漏洞。这个漏洞涉及跨链资金在合约中被冻结无法提取。目前 Sui 已经修复了该问题,根据漏洞披露政策[2],我们可以披露此问题。接下来,我们将提供这个漏洞的详细分析。Sui
Sui [3] 是首个从零开始设计的无需许可的 Layer 1 区块链。它以可扩展性、安全性重点和丰富的链上资产而闻名。与其他区块链相比,Sui 由于其可扩展性,在网络比较拥堵的情况下仍能保持低 Gas 费用。Move 设计强调安全性,防止诸如重入漏洞和伪造代币授权等问题。通过支持动态 NFT 和游戏经济,Sui 为开发人员提供了在 Web3 开发中创新的平台。Sui 开发工具包赋予开发人员无限制地构建应用的能力,为下一个十亿用户的到来做好准备。为了拓展其生态系统,Sui 集成了各种实验性功能,如 Native Bridge、zkLogin 多签、zkLogin providers、Random beacon 和 Enums。背景
1.在以太坊不断发展过程中,各大平台不断创新以增强其能力促进 DeFi 生态系统的发展。在这种背景下,各种非标准 ERC20 代币应运而生,并在生态系统中得到了广泛的应用。这些代币包括 fee-on-transfer 代币、Approval Race Protections 代币、不允许零值转账代币、转账缺失返回值的代币等。转账缺失返回值的代币由于偏离标准 ERC20 协议的实现,提出了独特的挑战。如 USDT、BNB 和 OMG,不像 ERC20 标准要求的那样在 ERC20 转账方法上返回布尔值,它们没有返回值,而根据 ERC20 标准[4],官方建议必须检查转账返回值。因此,像 USDT 这样缺乏返回值的代币,在尝试验证转账成功或者失败时可能会遇到错误,需要特殊处理这种类型的代币。漏洞
使用 USDT 进行跨链,资产将永久地冻结在协议中如下图所示,根据 BridgeConfig 合约的内容,我们发现协议支持的代币包括 Sui、WBTC、WETH、USDC、USDT 和 ETH。bridgeERC20() 函数允许用户将支持的代币存入,以便跨到指定的目标链。让我们深入研究一下 bridgeERC20() 函数,如下所示:协议首先在第 137 行验证要存入的代币是否得到了协议的支持。然后,在第 142-145 行,它检查桥合约是否有足够的授权来转移代币。接下来,在第 148 行,它调用 token.transferFrom() 函数将代币从用户转移到存储库中。随后,在第 151 行,它根据代币在 Sui 链上的精度转换代币的数量。最后,发出一个日志,便于 Sui 验证者委员会验证和处理跨链桥消息。Sui、WBTC、WETH、USDC 和 USDT 等代币都可以通过此函数调用进行存入。如果用户从 Sui 链跨链将资产转移到 ETH 链,可以用 transferBridgedTokensWithSignatures() 函数,将代币转移到指定的接收地址。如果是 ERC20 代币,协议会调用 vault.transferERC20() 将代币从保险库转移到目标地址。让我们来看一下以下代码片段中描述的 vault.transferERC20() 函数:在该函数中,协议首先在第 41 行获取代币地址。然后,在第 44 行调用 token.transfer() 将代币转移到目标地址,返回一个布尔值。最后,在第 47 行,协议检查该布尔值必须为 true。正如我们先前分析的那样,对于像 USDT 这样的代币,在成功转移时没有返回值。因此,如果从协议中提取 USDT,token.transfer() 将返回空,导致执行检查失败。因此,无法从协议中提取 USDT,且协议内没有提取资金的功能,导致资金永久冻结在协议内。关于这类问题,OpenZeppelin[5]已经开发了一个名为 safeERC20 的库来缓解这个问题。因此,建议使用 OpenZeppelin 的 safeTransfer() 函数来提取跨链资金。参考:
1.https://hackenproof.com/2.https://about.google/appsecurity/ 4.https://eips.ethereum.org/EIPS/eip-205.https://github.com/OpenZeppelin/openzeppelin-contracts/blob/52c36d412e8681053975396223d0ea39687fe33b/contracts/token/ERC20/utils/SafeERC20.sol#L36时间线与升级
4 月 1 日,MoveBit 团队发现了与资产冻结相关的漏洞,并立即通过 HackenProof 平台向 Sui 提交了报告。4 月 19 日,随后 Mysten 团队与工程师进行沟通后,确认了这两个问题。5 月 10 日,这个问题得到了修复。https://github.com/MystenLabs/sui/commit/d01026e2f8c9128ff29f52811b507df745c38a86MoveBit (莫比安全),BitsLab 旗下子品牌, 是一家专注于 Move 生态的区块链安全公司,通过率先使用形式化验证使 Move 生态成为最安全的 Web3 生态系统。MoveBit 已经陆续与全球多家知名项目合作,并为合作伙伴提供了全方位的安全审计服务。MoveBit 团队由学术界安全大牛和企业界安全领军人物组成,具有 10 年的安全经验,在 NDSS、CCS 等顶级国际安全学术会议上发表安全研究成果。并且他们是 Move 生态最早期的贡献者,与 Move 开发者共同制定安全 Move 应用的标准。
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。