零时科技 || GPU 攻击事件分析
2024-05-13 16:13
背景介绍
2024 年 5 月 8 日,监测到一起针对 BNBSmart Chain 链上项目 GPU 攻击事件,攻击 hash 为:https://bscscan.com/tx/0x2c0ada695a507d7a03f4f308f545c7db4847b2b2c82de79e702d655d8c95dadb
被攻击的项目为 GPU,攻击共造成 32400 USD 的损失。
攻击及事件分析
攻击者首先从 DODO 中利用 flashloan 借贷了 226007 BUSD
随后,在 PancakeSwap 中将这些 BUSD 兑换为 GPU Token ,共兑换了 26992 GPU。
接着,攻击者就通过 transfer 持续给自己转账,
漏洞就出现在 GPU Token 的 transfer 函数,如下图:
可以看到,GPU Token 的 transfer 最终调用的是父合约的_transfer 函数,也就是 ERC20 合约的_transfer 函数,如下图所示:
由上面的代码,我们可以看到,在进行 transfer 时,先保存 from 和 to 的 balance 到变量
senderAmount 和 recipientAmount,随后计算转账后的 senderAmount 和 recipientAmount 的值,最后在更新到 balances 中。但是,当 from 和 to 为同一地址时,先更新 from 再更新 to 其实就是给 to 凭空添加了 amount 数量的 token。所以,攻击者通过持续给自己转账从而让自己的 GPU Token 凭空增多。
最后,通过 PancakeSwap 将攻击获得的 GPU Token 兑换为 BUSD,获利 32400 USD。
总结
本次漏洞的成因是在 GPU Token 的 transfer 函数逻辑处理问题,且没有对用户输入进行验证。导致攻击者在给自己转账时自己持有的 GPU Token 会凭空增多。建议项目方在设计经济模型和代码运行逻辑时要多方验证,合约上线前审计时尽量选择多个审计公司交叉审计。
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。