2023 年 7 月 1 日,一名攻击者利用 Binance 智能链(BSC)上的 Biswap V 3 Migrator 合约的一个漏洞,从毫无戒心的用户那里窃取了价值约 14 万美元的代币。攻击者使用了假代币攻击,来操纵迁移函数的参数,并从授权了他们流动性提供者(LP)代币给 V 3 Migrator 合约的用户那里吸走流动性。之所以能够实施这种攻击,是因为 V 3 Migrator 合约在从 Biswap V 2 迁移到 Biswap V 3 时没有验证参数。倘若该攻击在当时未被及时阻止,将为 Biswap 带来近千万美元的资产损失。
攻击者执行了三笔交易来进行攻击:
https://bscscan.com//tx/ 0 xe 13 ec 0941580 d 3 c 286 b 46 fa 6566 f 20195 bdd 52 b 3 d 65 fc 7 ff 4 a 953 a 8 fc 774 c 6 c 4
攻击者的地址是[0xa1e31b29f94296fc85fac8739511360f279b1976]
攻击合约是[0x1d448e9661c5abfc732ea81330c6439b0aa449b5]这个合约是在 2023 年 6 月 30 日,也就是攻击前一天由攻击者部署的。该合约有一个简单的逻辑,就是用不同的参数调用 V 3 Migrator 合约。
被攻击合约是[0x839b0afd0a0528ea184448e890cbaaffd99c1dbf]这是 Biswap 于 2023 年 6 月 28 日部署的 V 3 Migrator 合约。该合约旨在帮助用户将他们的 LP 代币从 Biswap V 2 迁移到 Biswap V 3 。
攻击者利用了 V 3 Migrator 合约中的一个缺陷,使他们能够篡改迁移函数的参数,攻击步骤如下:
受害者授权了 LP 代币给 Biswap V 3 Migrator 合约;
攻击者烧毁了受害者的 V 2 LP 代币,并用假代币添加了 V 3 流动性。在这一步,V 2 LP 的 token 0 和 token 1 仍然在 V 3 Migrator 合约中;
攻击者烧毁了假的 V 2 LP 代币,并用 V 2 LP 的 token 0 和 token 1 添加了 V 3 流动性, 没有用于添加 V 3 流动性的多余的 token 0 和 token 1 被转回给了攻击者。同时,这一步中的 V 3 流动性也属于攻击者。
造成攻击的根本原因是 Biswap 的 V 3 Migrator 合约在从 Biswap V 2 迁移到 Biswap V 3 时没有验证参数。具体来说,合约中有一个重要问题:
合约没有验证 token 0 和 token 1 参数是否与 V 2 LP 代币中的实际代币相匹配
这个问题使得攻击者能够向迁移函数传递假代币和数量,并从授权了 LP 代币给 V 3 Migrator 合约的用户那里窃取真实代币。
攻击者[0xa1e31b29f94296fc85fac8739511360f279b1976] 非法获取了高达 14 万美元的资产
攻击者撤走流动性用以换取$BNB
最终,攻击者将 603 个$BNB 转入 Tornadocash 进行了洗钱操作
https://github.com/SunWeb3Sec/DeFiHackLabs/blob/main/src/test/Biswap_exp.sol
强烈建议用户取消 Biswap V 3 Migrator 的授权:https://bscscan.com/tokenapprovalchecker
Biswap 的攻击事件是一个典型的例子,假代币攻击充分利用 BSC 上的 DEX 漏洞收割用户和项目方的资金。该攻击也突显了验证处理用户资金的合约的参数和余额的重要性,用户在授权代币给第三方合约时也应该小心谨慎,并在使用之前检查合约的源代码和审计报告。作为对此次攻击事件的回应,Biswap 也很快采取了 2 个应对策略:
尽快要求用户撤销对 V 3 Migrator 合约的授权,这样攻击者就无法再访问他们的 LP 代币;
删除他们自己发布的推广 V 3 迁移并告知用户迁移 LP 代币收益的推文
如果这次攻击没有及时制止,Biswap 的所有迁移合约都将遭受数千万美元的损失,因为攻击者可以用假代币将所有流动性从 Biswap V 2 迁移到 Biswap V 3 ,这对 Biswap 及其用户来说将是一个毁灭性的打击,也是 BSC 上 DEX 发展的一个严重挫折。