看到 onekey 老板维权 Resupply,损失几 M 资产,感叹 Defi 真的太脆弱了。看了一圈,似乎都没有讲的特别清楚黑客到底是怎么攻击的,所以我自己做了点研究,分享给大家: 故事的主角是 ResupplyPair,用户可以通过质押资产进行借贷,合约中的 isSolvent 修饰符负责检查用户是否有资格借出请求的资产,具体代码逻辑为: 可以看到 282 行对 ltv 的计算,如果我们有办法将 _exchangeRate 置为 0,那检查不就恒成立?继续阅读代码: 可以看到这个值的变量来自于对预言机 getPrices 的调用,且是分母,换句话说我们需要使 collateral 的价格极大。 阅读预言机的代码可以知道 getPrices 只是一层转发,实际是调用了这个质押资产(即金库)的 convetToAssets 接口。继续阅读代码: 可以看到这个结果由很复杂的数学运算组成,这里黑客就是通过放大分子,更进一步地 total_assets,完成的攻击,查看 _total_assets 函数实现可以发现: 这个值和这个金库的 controller 合约所持有的 borrowed_token,也就是 crvUSD 有关。 分析到这里其实就清晰了,ResupplyPair 创建时使用了一个空的金库,黑客通过向金库的 controller 合约转入了一定量的 borrowed_token,最终使得 _exchangeRate 归零,从而使得自己的质押资产价值无限放大,使用极小的成本就借出了高达 10M 的 reUSD。 攻击交易: ResupplyPair 合约地址: 金库 controller 合约地址: 金库合约地址: 预言机合约地址:
6.83万
307
本页面内容由第三方提供。除非另有说明,欧易不是所引用文章的作者,也不对此类材料主张任何版权。该内容仅供参考,并不代表欧易观点,不作为任何形式的认可,也不应被视为投资建议或购买或出售数字资产的招揽。在使用生成式人工智能提供摘要或其他信息的情况下,此类人工智能生成的内容可能不准确或不一致。请阅读链接文章,了解更多详情和信息。欧易不对第三方网站上的内容负责。包含稳定币、NFTs 等在内的数字资产涉及较高程度的风险,其价值可能会产生较大波动。请根据自身财务状况,仔细考虑交易或持有数字资产是否适合您。