酸黄瓜遭攻击损失近2000万美元,DeFi路在何方?
摘要: 11月21日 凌晨 2 时 37 分,黑客攻击 DeFi 协议 Pickle Finance(酸黄瓜),捞得近 2000 万美元的 DAI。未经严格审计即上线的 DeFi 项目能走多远?
加密货币再次登上央视 DeFi沦为“科学家”的提款机?
一方面,加密货币市场频频发出利好消息;另一方面,DeFi 项目因未经严格审计频遭攻击。
据悉,今年 9 月 10 日 酸黄瓜 Pickle Finance 启动流动性挖矿,9 月 14 日 V神发推文赞赏该项目,使其代币价格暴涨 10 倍。而遭到此次攻击后,酸黄瓜损失近价值 2000 万的 DAI,同时 24 小时内其代币腰斩。
CoinmarketCap 数据显示, Pickle Finance 代币(Pickle)的价格在24小时内,从 22.7 美元跌到 10.2 美元,它的市值在未销毁的情况下, 24小时内蒸发了 1220 万美元。
发生了什么?
此时,咱们回到橘色框里的 curve、curveFunctionSig、curvePoolSize、curveUnderlyingIndex、underlying,其中 curve 是一个地址,它表示橘色框里倒数第二行中的 curve.call() 函数可以执行任意一个合约,因此,攻击者把 curve 设置成 StrategyCmpdDaiV2,curveFunctionSig 表示除了刚刚指定合约外,还可以指定要调用此合约的函数,通过此操作攻击者成功调用 StrategyCmpdDaiV2.withdraw() 函数。
接下来就是组织蓝色框中的函数 StrategyCmpdDaiV2.withdraw() 的参数 _asset,蓝色框中的 _asset 实际上是橘色框框里的 liquidity,liquidity 由传入函数 add_liquidity() 的 underlying 得来,underlying 是另一个伪造的合约地址,它的 balanceOf() 函数会返回 cDAI 的地址。攻击者将 cDAI 的地址设置成 liquidity[0] (此处的 0 也是 add_liquidity() 函数的参数 curveUnderlyingIndex),然后,liquidity 被打包到 callData 里再传给 withdraw() 函数,使得 withdraw() 函数取出的 _asset 就是 cDAI 的地址。值得注意的是,如果 want == _asset ,蓝色框里的函数就不执行,此设计的目的在于 want (也就是 DAI)是不允许被取出的,所以攻击者刻意取出对应的 cDAI。
未经严格审计的DeFi能走多远?
针对此次 Pickle Finance(酸黄瓜)被攻击事件,其审计公司 Haechi 发推文称,今年 10 月对其代码进行了一次审计,但是攻击者利用的漏洞发生在新创建的智能合约中,而不是接受安全审计的智能合约中。与此次漏洞攻击相关的代码存在于 controller-v4.sol 中的 swapExactJarForJar,而非此前审计的 controller-v3.sol 中,该智能合约不包含 swapExactJarForJar。
对此,PeckShield 相关负责人表示:“有一些 DeFi 项目在做过第一次智能合约安全审计后,可能会为了快速上线主网,省略审计新增的智能合约,这种省略或能争取短时的利益,但就像此次攻击一样最终因小失大。DeFi 们在上线之前一定要确保代码进行彻底地审计和研究,防范各种可能发生的风险。”
未经严格审计即上线的 DeFi 项目能走多远?
作者:PeckShield;来自链得得内容开放平台“得得号”,本文仅代表作者观点,不代表链得得官方立场凡“得得号”文章,原创性和内容的真实性由投稿人保证,如果稿件因抄袭、作假等行为导致的法律后果,由投稿人本人负责得得号平台发布文章,如有侵权、违规及其他不当言论内容,请广大读者监督,一经证实,平台会立即下线。如遇文章内容问题,请发送至邮箱:linggeqi@chaindd.com
评论(0)
Oh! no
您是否确认要删除该条评论吗?