在2025年1月8日,由于更新用户余额时存在缺陷,导致BSC上的Mosca合约遭到黑客攻击,造成约19,485美元的损失。
概述
分析
当用户join()
时,他们会被添加到rewardQueue
中。从此,每当其他用户buy()
或swap()
代币时,他们就会获得奖励。
感谢阅读Verichains!免费订阅以接收新帖并支持我的工作。
当用户决定退出时,会调用exitProgram()
。它会遍历rewardQueue
,当找到匹配的用户时,调用withdrawAll()
将所有待领取的奖励转移给用户。
在withdrawAll()
中,用户的总奖励计算为:balance = user.balance + user.balanceUSDT + user.balanceUSDC
但是,在exitProgram()
中,只有user.balance
被设置为0
,user.balanceUSDT
和user.balanceUSDC
在用户退出后仍然保持原值。黑客利用了这个漏洞进行了攻击。
黑客首先join()
该协议并成功存入一些资产(步骤4)。然后,他们利用一个池子进行闪电贷(步骤15),并创建一个'伪造的'buy()
操作(步骤23)来获得自己的奖励。最后,他们反复调用join()
和exitProgram()
来清空合约中的USDC。
结论
开发人员违反了检查-效果-交互模式,并在黑客攻击发生前仅几天部署了Mosca合约,这可能表明他们面临着高度的时间压力,产品缺乏足够的测试。为了防止此类问题,我们强烈建议从开发的初始阶段开始,并贯穿整个项目的生命周期,实施健全的审核流程。定期进行安全审计、代码审查和漏洞评估应该是标准做法,以在漏洞被利用之前识别和解决潜在的风险。
感谢阅读Verichains!免费订阅以接收新帖并支持我的工作。