安全公司慢雾对去中心化年金协议PunkProtocol遭遇攻击的原理进行了解析。攻击者首先调用CompoundModel合约的Initialize函数进行重复初始化操作将合约Forge角色设置为攻击者指定的地址。随后攻击者为了最大程度的将合约中资金取出,其调用了invest函数将合约中的资金抵押至Compound中以取得抵押凭证cToken。最后攻击者直接调用withdrawToForge函数将合约中的cToken转回Compound获取对应的底层资产并最终将其转给Forge角色。withdrawToForge函数被限制只有Forge角色可以调用,但Forge角色已被重复初始化为攻击者指定的地址,因此最终合约管理的资产都被转移至攻击者指定的地址。本次攻击的根本原因在于其CompoundModel的Initialize函数未做重复初始化检查,导致攻击者直接调用此函数进行重复初始化替换Forge角色,最终造成合约管理的资产被盗。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。