1. 首页
  2. 区块链资讯

假钱换真钱,揭秘PickleFinance被黑全过程

By :  yudan@慢雾平安团队

据慢雾区情报,2020 年 11 月 22 日,以太坊 DeFi 项目 Pickle Finance 遭受攻击,损失约 2000 万 DAI。

慢雾平安团队第一时间跟进相关事宜并举行剖析,以下为剖析简略历程。

攻击流程简析

1、项目的 Controller 合约中的 swapExactJarForJar 函数允许传入两个随便的 jar 合约地址举行代币的兑换,其中的 _fromJar, _toJar, _fromJarAmount, _toJarMinAmount 都是用户可以控制的变量,攻击者行使这个特征,将 _fromJar 和 _toJar 都填上自己的地址,_fromJarAmount 是攻击者设定的要抽取合约的 DAI 的数目,约 2000 万 DAI。

OKEx宣布11月27日前开放提币功能,已恢复热钱包系统的安全稳定运行

OKEx发布公告称,公司将于2020年11月27日(HKT)前开放自由提币。

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 函数,将攻击者在第三步转入的假 ptoken burn 掉,然后合约判断当前合约中 _toJar 合约指定的 token 的余额是多少,由于 _toJar 合约指定的 token 是 DAI,Controller 合约会判断合约中剩余 DAI 的数目,此时由于 第三步 Controller 合约已凑齐 2000 万 DAI,以是 DAI 的余额是 2000 万。这时 Controller 合约挪用 _toJar 合约的 deposit 函数将 2000 万 DAI 转入攻击者控制的 _toJar 合约中。到此,攻击者完成赢利。

总结

此次攻击中,攻击者通过挪用Controller合约中的 swapExactJarForJar 函数时,伪造 _fromJar 和 _toJar 的合约地址,通过转入假币而换取合约中的真 DAI,完成了一次攻击的历程。

原创文章,作者:链大大,如若转载,请注明出处:http://www.chaindada.com/chain/25578.html