慢雾安全团队分析Pickle黑客攻击

in HuaRen.News4 years ago

据 The Block报道,DeFi 协议 Pickle Finance 在周六的一个漏洞中损失近 2000 万美元的 DAI。

据悉,该漏洞利用涉及 Pickle Finance 的 DAI pJar 策略,该策略利用 Compound 协议通过 DAI 存款来获得收益。

来自该漏洞的资金已被转移到地址 0x70178102AA04C5f0E54315aA958601eC9B7a4E08。

根据 Cointelegraph 报道,就 Pickle Finance 因漏洞损失近 2000 万美元一事,白帽黑客、DeFi Italy 联合创始人 Emiliano Bonassi 表示,攻击者部署了“邪恶 Jar ”,这是一种具有传统 Jar 的相同界面、但是却作恶的智能合约。随后,攻击者在他的“邪恶 Jar ”和真正的 cDAI Jar 之间交换了资金,偷走价值 2000 万美元的存款。

慢雾安全团队表示第一时间跟进了相关事件并进行分析,以下为分析简略过程:

  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 函数,将攻击者在第三步转入的假 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,完成了一次攻击的过程。

此外,针对 Pickle Finance 攻击事件,审计公司 Haechi 澄清称,我们 10 月进行了一次审计,但是攻击者利用的漏洞发生在新创建的智能合约中,而不是接受安全审计的智能合约中。与此次漏洞攻击相关的代码是“controller-v4.sol”中的“swapExactJarForJar”;而此前的安全审计是针对“controller-v3.sol”,不包含“swapExactJarForJar”。在不久的将来,Haechi 将发表关于 Pickle Finance 攻击事件的分析文章。

本帖 steem 首发

慢雾安全团队分析Pickle黑客攻击

最近新帖

  1. Chainlink去中心化预言机如何避免对喂价发起攻击
  2. 算力上涨对以太坊矿工影响有限
  3. 2020年DeFi爆发式增长
  4. Solidity 优化 - 控制 gas 成本
  5. 召穆公和周定公联合管理
  6. 雍正创立军机处
  7. 亲仁避害
  8. 有能勿私
  9. 谨防花言巧语
  10. 简慈狎怠
  11. 初恋复合却家庭不和,为财被杀
  12. EOS和TRon应用生态短时间仍然难以超越ETH
  13. EOS和TRon应用生态短时间仍然难以超越ETH
  14. 国民党定性高雄市长补选:不能只有一种声音
  15. BTC这次跌破趋势线?
  16. 新人首贴,在贵社区体验一下steemit的新版本
Sort:  

This post has been rewarded by #nutbox. Nutbox is the DApp Incubator of Steem , and you can mine PNUT token by staking to us via https://nutbox.io .Contact us at https://discord.gg/zPkMuGY

Coin Marketplace

STEEM 0.17
TRX 0.15
JST 0.029
BTC 57028.16
ETH 2358.36
USDT 1.00
SBD 2.40