BitsLab 旗下 MoveBit 团队发现并协助修复Sui 跨链协议高危漏洞

BitsLab 旗下 MoveBit 团队发现并协助修复Sui 跨链协议高危漏洞


在今年四月,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。

BitsLab 旗下 MoveBit 团队发现并协助修复Sui 跨链协议高危漏洞

背景


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。
BitsLab 旗下 MoveBit 团队发现并协助修复Sui 跨链协议高危漏洞
bridgeERC20()函数允许用户将支持的代币存入,以便跨到指定的目标链。让我们深入研究一下bridgeERC20()函数,如下所示:
协议首先在第137行验证要存入的代币是否得到了协议的支持。然后,在第142-145行,它检查桥合约是否有足够的授权来转移代币。接下来,在第148行,它调用token.transferFrom()函数将代币从用户转移到存储库中。随后,在第151行,它根据代币在Sui 链上的精度转换代币的数量。最后,发出一个日志,便于Sui 验证者委员会验证和处理跨链桥消息。Sui、WBTC、WETH、USDC 和USDT 等代币都可以通过此函数调用进行存入。
BitsLab 旗下 MoveBit 团队发现并协助修复Sui 跨链协议高危漏洞
如果用户从Sui链跨链将资产转移到ETH链,可以用transferBridgedTokensWithSignatures()函数,将代币转移到指定的接收地址。如果是ERC20代币,协议会调用vault.transferERC20()将代币从保险库转移到目标地址。让我们来看一下以下代码片段中描述的vault.transferERC20()函数:
在该函数中,协议首先在第41行获取代币地址。然后,在第44行调用token.transfer()将代币转移到目标地址,返回一个布尔值。最后,在第47行,协议检查该布尔值必须为true。
BitsLab 旗下 MoveBit 团队发现并协助修复Sui 跨链协议高危漏洞
正如我们先前分析的那样,对于像USDT 这样的代币,在成功转移时没有返回值。因此,如果从协议中提取USDT,token.transfer()将返回空,导致执行检查失败。因此,无法从协议中提取USDT,且协议内没有提取资金的功能,导致资金永久冻结在协议内。
关于这类问题,OpenZeppelin[5]已经开发了一个名为safeERC20的库来缓解这个问题。因此,建议使用OpenZeppelin的safeTransfer()函数来提取跨链资金。

参考:

1.https://hackenproof.com/
2.https://about.google/appsecurity/ 
3.https://docs.sui.io/
4.https://eips.ethereum.org/EIPS/eip-20
5.https://github.com/OpenZeppelin/openzeppelin-contracts/blob/52c36d412e8681053975396223d0ea39687fe33b/contracts/token/ERC20/utils/SafeERC20.sol#L36

时间线与升级

4月1日,MoveBit 团队发现了与资产冻结相关的漏洞,并立即通过HackenProof 平台向Sui 提交了报告。
4月17日,我们提交了另一个漏洞报告。
4月19日,随后Mysten 团队与工程师进行沟通后,确认了这两个问题。
5月10日,这个问题得到了修复。https://github.com/MystenLabs/sui/commit/d01026e2f8c9128ff29f52811b507df745c38a86

关于 MoveBit




MoveBit (莫比安全),BitsLab 旗下子品牌, 是一家专注于 Move 生态的区块链安全公司,通过率先使用形式化验证使 Move 生态成为最安全的 Web3 生态系统。MoveBit 已经陆续与全球多家知名项目合作,并为合作伙伴提供了全方位的安全审计服务。MoveBit 团队由学术界安全大牛和企业界安全领军人物组成,具有10年的安全经验,在 NDSS、CCS 等顶级国际安全学术会议上发表安全研究成果。并且他们是 Move 生态最早期的贡献者,与 Move 开发者共同制定安全 Move 应用的标准。

END


点击卡片,关注 MoveBit ~


原文始发于微信公众号(MoveBit):BitsLab 旗下 MoveBit 团队发现并协助修复Sui 跨链协议高危漏洞

版权声明:admin 发表于 2024年10月9日 下午6:11。
转载请注明:BitsLab 旗下 MoveBit 团队发现并协助修复Sui 跨链协议高危漏洞 | CTF导航

相关文章