最后,当攻击者调用withdraw函数时,只要输入比deposit值大的参数就可以赎回超过质押数的PCT代币。 按照这个机制,黑客在攻击时,可以重复重复调用deposit和withdraw功能,从而导致合约质押的PCT损耗不断增加、资金池持有的PCT余额不断变小。然后在计算奖励时,由于使用资金池中的余额作为分母,而分母越小,则可额外领取的奖励就越多。 了解了代码的漏洞及相关机制后,我们再来看黑客诸多攻击中的一次攻击: 这次攻击中,黑客的地址为:0xfc6682db7e9f57882e8b18ebc9adc7a19f770494,其交易流程如下: 可以看出第一笔交易0xe446f质押了8.1万PCT,然后在0x76d33 提取奖励时却提取了16万PCT。 我们继续查看withdraw交易的参数,可以看出传入amount值为 22603495a2af5d0ccc34,将其转换为10进制数就是16万,远超质押金额8.1万。详细细节如下图所示: 从这次攻击的漏洞原因看,在转账时有损耗的代币在参与收益类项目时,存在较多的问题。因此灵踪安全提醒项目方要充分考虑损耗对收益计算的影响。 对此类问题,灵踪安全一直以来都会在审计时特别和项目方强调。另外我们也再次强调审计在项目中的重要性,希望项目方在项目上线前充分做好审计工作。 (责任编辑:admin) |