事件背景
零时科技区块链安全情报平台监控到消息,北京时间2023年4月1日,BSC链上Allbridge跨链桥受到黑客攻击,攻击者获利约57万美元,攻击者地址为0xc578d755cd56255d3ff6e92e1b6371ba945e3984,被盗资金转移至Tornado.cash混币平台。零时科技安全团队及时对此安全事件进行分析。
合约漏洞
合约中执行兑换操作函数swapToVUsd中计算兑换结果方式为合约中当前记录BUSD余额与计算转入token后的数量转换为BUSD的差值得到的,因此攻击者通过存取大量资金以及进行大量代币兑换实现对池子中代币价格控制。
攻击步骤
1. 攻击者通过闪电贷借出7,500,000 BUSD
2. 将 2,003,300 BUSD 兑换为 2,000,296 USDT,此时合约中 BUSD 余额为11,405,966,USDT余额为8,296,249
3. 调用合约中deposit函数,向合约中存入 5,000,000 BUSD
4. 此时攻击者地址剩余 496,700 BUSD,攻击者将剩余 BUSD 全部兑换为 USDT,共 495,488 个
5. 将之前兑换得到的 2,000,296 USDT 存入合约
6. 调用Allbridge Core: Bridge合约中swap函数,使用495,784 USDT 兑换 490,849 BUSD
7. 取出之前存入的 4,830,999 BUSD
8. 调用Allbridge Core: Bridge合约中swap函数,使用 40,000 BUSD 兑换出 789,632 USDT
9. 将存入的资金提出,并将USDT兑换为BUSD
10. 归还闪电贷
攻击者此次攻击中共获利 549,874 BUSD
总结及建议
此次攻击是由于攻击者可以通过大额存取资金和进行兑换,从而修改交易池中代币的比例,实现用较少的BUSD兑换出大额USDT从而获利。
安全建议
-
建议对合约中进行代币兑换的函数添加最大兑换比判断,避免当池子中代币数量差值较大时执行兑换产生较大损失。
-
建议项目方上线前进行多次审计,避免出现审计步骤缺失
往期内容回顾
原文始发于微信公众号(零时科技):零时科技 || 跨链桥Allbridge约57万美元损失事件分析