0x1 事件背景
零时科技区块链安全情报平台监控到消息,北京时间2022年8月8日,EGD加密项目疑似遭到黑客攻击,损失超3.6万 BUSD,零时科技安全团队及时对此安全事件进行分析。
0x2 攻击信息
- 攻击者钱包地址:
0xee0221d76504aec40f63ad7e36855eebf5ea5edd
- 攻击合约地址:
0xc30808d9373093fbfcec9e026457c6a9dab706a7
- 攻击交易:
0x50da0b1b6e34bce59769157df769eb45fa11efc7d0e292900d6b0a86ae66a2b3
- EGD_Finance合约:
0x93c175439726797dcee24d08e4ac9164e88e7aee
0x3 攻击步骤
1. 部署攻击合约,调用EGD_Finance合约中stake函数,向EGD_Finance合约发送 100 USD,获得userStakeList
2.利用闪电贷从合约0x16b9a82891338f9ba80e2d6970fdda79d1eb0dae借出2000 USD至攻击者合约地址
3. 使用闪电贷从BEP20USDT合约中借出424,456 USD
4. 调用claimAllReward() 获得奖励 5,614,105 EGDToken
5. 将从EGDFinance 合约中用闪电贷借出的USD 归还
6. 将获得的5,052,695 EGDToken 兑换为37,327 USD
7. 将从0x16b9a82891338f9ba80e2d6970fdda79d1eb0dae 通过闪电贷借出的资金归还
8. 将获得的剩余资金发送至攻击者地址,共36,044 USD
0x4 漏洞核心
攻击者利用EGDToken的价格计算方式进行攻击
获取EGD价格方式为用USD数量除EGD数量,当池子中USD数量价格减少时,EGDToken价格会下降。计算获得奖励的方法为quota/EGDPrice,即当EGDToken价格下降时,获得奖励会增加,攻击者利用这一漏洞进行攻击,利用闪电贷借出池子中USD,使池子中USD减少,EGDToken价格下降,此时获得奖励增加,将奖励取出后,将借出的USD还给池子,之后将EGDToken兑换为USD。
0x5 资金流向
资金由攻击者合约地址转入攻击者地址后目前还未移动
总结及建议
通过此次攻击来看,该次攻击核心主要为项目方合约Token价格计算机制过于简单,当USD数量变动较大时EGDToken数量跟着变动,使得攻击者能够通过影响池子中另一个代币数量来影响EGDToken奖励数量。
安全建议
- 建议对奖励计算方法进行详细设计
- 建议项目方上线前进行多次审计,避免出现审计步骤缺失