慢雾:假钱换真钱 揭秘 Pickle Finace 被黑过程_币世界+慢雾科技

2020-11-22 15:13 栏目:行业动态 来源:网络整理 查看()

攻击者在调用Controller合同中的swapExactJarForJar函数时伪造了_fromJar和_toJar的合同地址,并用假币换取合同中的真实DAI,从而完成了一个攻击过程。根据慢雾区的信息,2020年11月22日,位于Ethereum的DeFi项目Pickle Finance遭到攻击,损失约2000万DAI。慢雾安全团队会跟进相关事件,并在第一时间进行分析。下面是一个简要的分析过程

1.项目的控制器协定中的swapExactJarForJar函数允许传入两个任意的Jar协定地址进行令牌交换,其中_ fromjar、_ tojar、_ fromjaramount和_ tojarminamount是用户可以控制的变量,攻击者可以利用这个特性。用自己的地址填写_fromJar和_toJar。_fromJarAmount是攻击者为提取合同而设置的dais数,约为2000万dais

2.在使用swapExactJarForJar函数进行交换的过程中,契约会通过传入的_fromJar契约和_toJar契约的token()函数获取对应的令牌,用来指定交换的资产。而且因为_fromJar契约和_toJar契约都是由攻击者导入的,所以使用token()函数获得的值是可控的。这里,从_fromJar契约和_toJar契约获得的令牌是DAI。

3.此时发生交换。控制器契约使用transferFrom函数从_fromJar契约中转移一定数量的ptoken,但是由于fromJar契约是攻击者控制的地址,所以这里转移的ptoken是攻击者的伪币。同时,由于合同从_fromJar合同中获得的令牌是DAI,因此合同会判断合同中的资金是否足够兑换,如果不够,则从保单池中赎回一定数量的令牌,转移到Controller合同中。在这次攻击中,合同中的DAI不足以赎回。此时,合同将从保单池中筹集不足的份额,以弥补攻击者设定的2000万DAI

4.交换还在继续。从策略池中提出的DAI足够攻击者设置的2000万DAI后,Controller契约将调用_fromJar的retrace函数烧掉攻击者在第三步转移的伪ptoken,然后契约判断当前契约中_toJar契约指定的令牌的余额。由于_toJar合同中指定的令牌是DAI,因此控制器合同将判断合同中剩余的DAI数量。此时,由于主计长合同第三步已收2000万DAI,DAI余额为2000万。此时,Controller合同调用_toJar合同的存款函数,将2000万DAI转入攻击者控制的_toJar合同。此时,攻击者完成获利

总结:在这次攻击中,攻击者在调用Controller契约中的swapExactJarForJar函数时伪造了_fromJar和_toJar的契约地址,并用假币换取契约中的真实DAI,从而完成了一次攻击过程。

微信二维码
售前客服二维码

文章均源于网络收集编辑侵删

提示:仅接受技术开发咨询!

郑重申明:资讯文章为网络收集整理,官方公告以外的资讯内容与本站无关!
NFT开发,NFT交易所开发,DAPP开发 Keywords: NFT开发 NFT交易所开发 DAPP开发