解析跨链收益率提升平台 Popsicle Finance 遭攻击原因及过程_区块链前沿

解析跨链收益率提升平台 Popsicle Finance 遭攻击原因及过程

报复者经历 Popsicle Finance 在机枪池完结上的空隙提议报复,收获胜过 2000 万美元。

撰文:BlockSec

北京光阴 2021 年 8 月 4 日早晨 6 点(区块 12955063),Popsicle Finance 名目下的多个机枪池被报复,丢失金额胜过两切切美元,是迄今为止 DeFi 周围产生的丢失数额最大的单笔报复之一。经历理会 报复买卖 及名目代码咱们浮现,这次报复是一个运用名目的记账空隙施行屡次索取的报复(Double-Claiming Rewards)。底下咱们经历代码和报复过程理会这次报复。

代码理会

Popsicle Finance 是一个触及多个链的机枪池(Yield Optimization Platform)。

用户开始挪用 deposit 函数向机枪池存入确定的震动性,并取得 Popsicle LP Token (以下简称 PLP Token)动作入款的份额解释。Popsicle Finance 会将用户供应的震动性存入 Uniswap 等底层池子并取得收益。

[虚拟印钞机] Popsicle Finance 双花攻击分析

用户还也许挪用 withdraw 函数,按照用户持有的 PLP Token 所代表的震动性份额,从机枪池取回震动性。Popsicle Finance 会将 PLP Token 对应的震动性从 Uniswap 等底层池子中取回给用户。

[虚拟印钞机] Popsicle Finance 双花攻击分析

结尾,用户在机枪池中存的震动性会跟着光阴孕育确定的收益(Yield),会累计在合约的用户状况中。用户也许挪用 collectFees 函数取回局部入款夸奖。

[虚拟印钞机] Popsicle Finance 双花攻击分析

本次报复的中心函数恰是 collectFees 函数。底下咱们逐渐理会其代码。开始取得保存在 userInfo 中的用户状况。个中用户状况中的 token0Rewards 和 token1Rewards 是因为用户入款而积累的夸奖。

接下来计划该合约中,对应机枪池的 Token 对的 Balance。倘使在合约中有充实的 Balance,就按金额将 Reward 支出给用户;不然会挪用 pool.burnExactLiquidity 从底层 pool 取回震动性返回给用户。

结尾,会将记载在 userInfo 中的 Rewards 状况施行革新。看到这边,机枪池的代码完结如故比拟符合逻辑的。不过在函数本原咱们浮现了 updateVault modifier,这个函数会在 collectFees 的函数体之前运转,空隙或许在 updateVault 关系的函数中。

[虚拟印钞机] Popsicle Finance 双花攻击分析

以上是 updateVault 关系函数的完结。进程以下:

  1. 开始挪用_earnFees 向底层 pool 获得补偿的 Fee;
  2. 随后挪用_tokenPerShare 革新 token0PerShareStored 和 token1PerShareStored 参数,这两个参数代表了池子中每一个 share 代表的 token0 和 token1 的数目,即机枪池的每一个份额计代表的 Token 对数目;
  3. 结尾挪用_fee0Earned 和_fee1Earned 革新对应到这个用户的入款 Rewards (即 user.token0Rewards 和 user.token1Rewards)。

[虚拟印钞机] Popsicle Finance 双花攻击分析

以上是_fee0Earned 和_fee1Earned 函数的完结,两个函数完结类似,都完结了如许一个公式(以_fee0Earned 为例):

user.token0Rewards += PLP.balanceOf(account) * (fee0PerShare – user.token0PerSharePaid) / 1e18

也即是说,该函数会在原本的 user.token0Rewards 原形上,按照用户具有的 PLP Token 数目计划应给用户分发的 Fee 的份额。

但咱们注视到这个函数是增量的,也即是说即便用户并不持有 PLP Token (PLP.balanceOf(account) 为 0),该函数仍会返回保管在 user.token0Rewards 中记账的入款夸奖。

是以对全面合约,咱们浮现两个要害的逻辑毛病:

  1. 用户的入款夸奖是记载在 user.token0Rewards 和 user.token1Rewards 中的,其实不与任何 PLP Token 或其余货色有任何大势的绑定。
  2. 用于取回入款收益的 collectFees 函数只是依靠于记账的 user.token0Rewards 和 user.token1Rewards 状况,即便用户并未持有 PLP Token,仍也许取出对应的入款夸奖。

咱们设想一个报复过程:

  1. 报复者向机枪池中存入确定的震动性,取得一局部 PLP Token。
  2. 报复者挪用 collectFees(0, 0),后者会革新报复者的入款夸奖,即状况变量 user.token0Rewards 的值,但并不真实取回入款夸奖。
  3. 报复者将 PLP Token 转给本人上下的其余合约,再挪用 collectFees(0, 0) 革新状况变量 user.token0Rewards。也即是说经历持续地流转 PLP Token 并挪用 collectFees(0, 0),报复者复制了这些 PLP Token 对应的入款夸奖。
  4. 结尾,报复者从以上各个所在挪用 collectFees 函数,取回真实的夸奖。此时固然这些账户中并不 PLP Token,但因为记账在 user.token0Rewards 不革新,报复者是以得以取出多份夸奖。

用实际生计中的例子来描写这个报复,异常于我向银行存钱,银行给了我一张入款左证,但这张左证不防伪法子也不和我绑定,我把左证复印了几份发给分别的人,他们每一个人都凭仗这个左证向银行取回了本钱。

报复过程理会

经历以上的代码理会,咱们浮现了 Popsicle Finance 在机枪池完结上的空隙。底下咱们对报复买卖施行深刻理会,看报复者是何如运用这个空隙的。

报复者的整体过程以下:

  1. 报复者创造了三个买卖合约。个中一个用于提议报复买卖,其它两个用于接管 PLP Token 并挪用 Popsicle Finance 机枪池的 collectFees 函数取回入款夸奖。
  2. 经历闪电贷从 AAVE 借出洪量震动性。报复者采用了 Popsicle Finance 名目下的多个机枪池,向 AAVE 借出了对应这些机枪池的六种震动性。
  3. 施行 Deposit-Withdraw-CollectFees 轮回。报复者全豹施行了 8 次轮回,区别报复了 Popsicle Finance 名目下的多个机枪池,取出了洪量震动性。
  4. 向 AAVE 了偿闪电贷,并将收获经历 Tornado Cash 洗钱。

[虚拟印钞机] Popsicle Finance 双花攻击分析

本次报复买卖首要由数个 Deposit-Withdraw-CollectFees 轮回变成,每个轮回的提示图如上图所示。按照咱们的理会,逻辑以下:

  1. 报复者开始将闪电贷借来的震动性存入机枪池中,取得确定量的 PLP Token。
  2. 报复者将 PLP Token 转给报复合约 2。
  3. 报复合约 2 挪用机枪池的 collectFees(0, 0) 函数,树立合约 2 对应的 user.token0Rewards 和 user.token1Rewards 状况。
  4. 报复合约 2 将 PLP Token 转给报复合约 3。
  5. 和报复合约 2 的职掌宛如,报复合约 3 挪用机枪池的 collectFees(0, 0) 函数,树立合约 2 对应的 user.token0Rewards 和 user.token1Rewards 状况。
  6. 报复合约 2 将 PLP Token 转回报复合约,后者挪用机枪池的 withdraw 函数 Burn 掉 PLP Token,取回震动性。
  7. 报复合约 2 和报复合约 3 挪用 collectFees 函数,用乌有的 tokenRewards 状况取回了入款夸奖。

按照咱们的以太坊买卖 追踪可视化体例 给出的买卖挪用图以下,个中局部要害买卖用红字施行标注:

[虚拟印钞机] Popsicle Finance 双花攻击分析

成本理会

本次报复全豹收获:2.56k WETH,96.2 WBTC,160k DAI,5.39m USDC,4.98m USDT,10.5k UNI,收获全部胜过 20,000,000 美元。

在这次报复以后报复者经历开始经历 Uniswap 和 WETH 将报复取得的其余 token 一块换成 ETH,尔后经历屡次运用 Tornado.Cash 将 ETH 洗白。

免责说明:动作区块链讯息平台,本站所宣告作品仅代表作家一面见解,与链闻 ChainNews 态度无关。作品内的讯息、见识等均仅供参考,并不是动作或被视为本质投资倡导。

以太坊

以太坊

以太坊

以太坊

怒放的宣传式区块链运用平台,经历其专属加密钱币 Ether 以太币供应去重心化的假造机,解决点对点合约。理睬任何人设立和运用经历区块链岁月运转的去重心化运用,不任何狡黠、审查、第三方禁锢。 以太坊的观念初次在 2013 至 2014 年由维塔利克·布特林 Vitalik Buterin 受比特币发掘后提议,旨在共通建立一个更寰球化、更自如、更切实的互联网。以太坊EthereumETHERC 20ERC-20ERC20ERC721ERC-721以太坊2.0以太坊 2.0察看更多Uniswap

Uniswap

Uniswap

Uniswap

Uniswap 一种简洁的无代币交流合同,被称为去重心化的 Shapeshift 可能 Bancor,已在主网上煽动。用 Vyper 写稿,Gas 嘱咐奇低非常。UniswapUniswap.ExchangeUniswap.infoUniswap V2Uniswap V1UNIUniswap V3UNI Grants察看更多以太坊 平安 DeFi Uniswap Popsicle Finance

区块链前沿是一个专业的比特币价格查询&区块链数字货币资讯平台,我们为用户提供关于区块链企业、数字货币币种、数字货币交易平台及区块链人物的相关信息,我们整理发布全球主流比特币交易平台、虚拟数字货币交易平台、区块链应用企业的结构化信息,我们对区块链及数字资产充满热情,立志打造成一个区块链综合门户网站。
区块链前沿 » 解析跨链收益率提升平台 Popsicle Finance 遭攻击原因及过程

发表评论