本文来自TheBlock、CointelegraphOdaily星球日报译者|余顺遂
据TheBlock报道,DeFi协议PickleFinance在周六的一个漏洞中损失近2000万美元的DAI。据悉,该漏洞利用涉及PickleFinance的DAIpJar策略,该策略利用Compound协议通过DAI存款来获得收益。来自该漏洞的资金已被转移到地址0x70178102AA04C5f0E54315aA958601eC9B7a4E08。根据Cointelegraph报道,就PickleFinance因漏洞损失近2000万美元一事,白帽黑客、DeFiItaly联合创始人EmilianoBonassi表示,攻击者部署了“邪恶Jar”,这是一种具有传统Jar的相同界面、但是却作恶的智能合约。随后,攻击者在他的“邪恶Jar”和真正的cDAIJar之间交换了资金,偷走价值2000万美元的存款。
官方回应:鼓励LP从Jar中提取资金,直到问题解决
11月22日,PickleFinance发推称,有报道说我们的DAIPickleJar策略已被利用。我们正在积极调查此事,并将提供进一步的更新。我们鼓励所有LP从Jar中提取资金,直到问题得到解决。具体操作如下:
1)从农场解押:访问https://vfat.tools/pickle/,连接您的钱包。向下滚动找到您的农场,然后单击UNSTAKE。这也将申领您的Pickle奖励。您现在必须从您的Jar里解押。2)从Jar取款:访问https://github.com/pickle-finance/contracts#pickle-jars-pjars,找到您的Jar,然后单击“PickleJar”列表下的蓝色链接。
3)在代表Jar的Etherscan页面上,单击CONTRACT->WRITECONTRACT->CONNECTTOWEB3。您会看到一个弹出框。点击“OK”。如果它不能连接,再次点击“CONNECTTOWEB3”,然后就会连接。4)进入Option15,点击蓝色按钮“WRITE”。然后像平常一样完成您的Metamask交易。5)对所有需要提取资金的Jar重复这个过程。后续更新
22日下午,慢雾安全团队表示第一时间跟进了相关事件并进行分析,以下为分析简略过程:1.项目的Controller合约中的swapExactJarForJar函数允许传入两个任意的Jar合约地址进行代币的兑换,其中的_fromJar、_toJar、_fromJarAmount、_toJarMinAmount都是用户可以控制的变量,攻击者利用这个特性,将_fromJar和_toJar都填上自己的地址,_fromJarAmount是攻击者设定的要抽取合约的DAI的数量,约2000万DAI。2.使用swapExactJarForJar函数进行兑换过程中,合约会通过传入的_fromJar合约和_toJar合约的token()函数获取对应的token是什么,用于指定兑换的资产。而由于_fromJar合约和_toJar合约都是攻击者传入的,导致使用token()函数获取的值也是可控的,这里从_fromJar合约和_toJar合约获取到的token是DAI。3.此时发生兑换,Controller合约使用transferFrom函数从_fromJar合约转入一定量的的ptoken,但是由于fromJar合约是攻击者控制的地址,所以这里转入的ptoken是攻击者的假币。同时,因为合约从_fromJar合约中获取的token是DAI,然后合约会判断合约里的资金是否足够用于兑换,如果不够,会从策略池中赎回一定量的代币然后转到Controller合约中。在本次的攻击中,合约中的DAI不足以用于兑换,此时合约会从策略池中提出不足的份额,凑够攻击者设定的2000万DAI。4.兑换继续,Controller合约在从策略池里提出DAI凑够攻击者设定的2000万DAI后,会调用_fromJar的withdraw函数,将攻击者在第三步转入的假ptokenburn掉,然后合约判断当前合约中_toJar合约指定的token的余额是多少,由于_toJar合约指定的token是DAI,Controller合约会判断合约中剩余DAI的数量,此时由于第三步Controller合约已凑齐2000万DAI,所以DAI的余额是2000万。这时Controller合约调用_toJar合约的deposit函数将2000万DAI转入攻击者控制的_toJar合约中。到此,攻击者完成获利。总结:此次攻击中,攻击者通过调用Controller合约中的swapExactJarForJar函数时,伪造_fromJar和_toJar的合约地址,通过转入假币而换取合约中的真DAI,完成了一次攻击的过程。此外,针对PickleFinance攻击事件,审计公司Haechi澄清称,我们10月进行了一次审计,但是攻击者利用的漏洞发生在新创建的智能合约中,而不是接受安全审计的智能合约中。与此次漏洞攻击相关的代码是“controller-v4.sol”中的“swapExactJarForJar”;而此前的安全审计是针对“controller-v3.sol”,不包含“swapExactJarForJar”。在不久的将来,Haechi将发表关于PickleFinance攻击事件的分析文章。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。