月亮链 月亮链
Ctrl+D收藏月亮链

TOKEN:Popsicle Finance 双花攻击分析_TOK

作者:

时间:1900/1/1 0:00:00

北京时间 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 等底层池子并获得收益。

用户还可以调用 withdraw 函数,根据用户持有的 PLP Token 所代表的流动性份额,从机池取回流动性。Popsicle Finance 会将 PLP Token 对应的流动性从 Uniswap 等底层池子中取回给用户。

Worldcoin:World ID等全球PoP解决方案可以解锁新一代产品和服务:金色财经报道,Worldcoin官方发文称,世界币正在全球开发者社区的支持下建立世界上最大的人类身份和金融网络。使用World ID构建,开发人员可以通过强大的方式来防止机器人程序并使用户能够展示其经过验证的人格证明。?World ID等全球PoP解决方案可以解锁新一代产品和服务,包括:

·社交网络。机器人保护、社区审核、内容归属;

·表决。DAO 治理、选举、在线民意调查;

·金融服务。抵押贷款不足、卡欺诈、合规;

·客户激励。忠诚度计划、优惠券、推荐、免费试用;

·市场。声誉、虚假评论、虚假交易、预防黄牛;

金钱分配。社会项目、发展援助、救灾、非营利援助、奖学金、加密货币空投、全民基本收入。

然而,他们的成功取决于充满活力和多元化的开发者社区,通过构建有用的第三方应用程序来提供其可扩展性、可用性和实用性。[2023/8/12 16:21:43]

最后,用户在机池中存的流动性会随着时间产生一定的收益(Yield),会累计在合约的用户状态中。用户可以调用 collectFees 函数取回部分存款奖励。

Popcorn项目Discord服务器遭入侵:金色财经报道,据CertiK官方推特发布消息称,Popcorn项目Discord服务器遭入侵,有黑客发布钓鱼链接。请用户勿与相关链接交互,[2023/6/21 21:51:16]

本次攻击的核心函数正是 collectFees 函数。下面我们逐步分析其代码。首先获得存储在 userInfo 中的用户状态。其中用户状态中的 token0Rewards 和 token1Rewards 是由于用户存款而累积的奖励。

接下来计算该合约中,对应机池的 Token 对的 Balance。如果在合约中有足够的 Balance,就按金额将 Reward 支付给用户;否则会调用 pool.burnExactLiquidity 从底层 pool 取回流动性返回给用户。

最后,会将记录在 userInfo 中的 Rewards 状态进行更新。看到这里,机池的代码实现还是比较符合逻辑的。但是在函数开头我们发现了 updateVault modifier,这个函数会在 collectFees 的函数体之前运行,漏洞也许在 updateVault 相关的函数中。

Popsicle Finance在Immunefi推出漏洞赏金计划:8月21日消息,跨链平台Popsicle Finance在智能合约漏洞赏金平台Immunefi推出漏洞赏金计划,关键级别漏洞奖励10万美元,高级别漏洞奖励5000至10000美元。

此前消息,Popsicle Finance黑客攻击事件损失超过2000万美元。[2021/8/21 22:28:39]

以上是 updateVault 相关函数的实现。过程如下:

首先调用_earnFees 向底层 pool 获取积累的 Fee;

随后调用_tokenPerShare 更新 token0PerShareStored 和 token1PerShareStored 参数,这两个参数代表了池子中每个 share 代表的 token0 和 token1 的数量,即机池的每个份额计代表的 Token 对数量;

最后调用fee0Earned 和fee1Earned 更新对应到这个用户的存款 Rewards (即 user.token0Rewards 和 user.token1Rewards)。

LollipopSwap创始人:中心化交易所对DeFi感到恐惧,笨拙地借机推广平台币:Defi项目LollipopSwap创始人在Medium表示,中心化交易所对于DeFi感到恐惧,并尝试通过挖矿模式推销他们的平台币和平台稳定币。据悉,Lollipopswap已于9月8号9点正式开放新的流动性挖矿池,包括DAI-ETH、UMA-ETH、COMP-ETH、LEND-ETH、YFI-ETH、SUSHI-ETH、LINK-ETH和BAND-ETH。[2020/9/10]

以上是fee0Earned 和fee1Earned 函数的实现,两个函数实现相同,都实现了这样一个公式(以_fee0Earned 为例):

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

也就是说,该函数会在原有的 user.token0Rewards 基础上,根据用户拥有的 PLP Token 数量计算应给用户发放的 Fee 的份额。

PopChain将在明天上市Bithumb:PopChain的代币持有者只有20人,其中持有率第一的人持有76%,持有率第二的人持有15%,这二者加起来拥有超过90%的代币。而PopChain截止目前没上线其他交易所,导致现在行业内存在一种敏感气氛,Bithumb也因此失去了一些人的信任。PopChain是以区块链技术为底层驱动的开源公有链。[2018/5/16]

但我们注意到这个函数是增量的,也就是说即使用户并没有持有 PLP Token (PLP.balanceOf(account) 为 0),该函数仍会返回保存在 user.token0Rewards 中记账的存款奖励。

因此对于整个合约,我们发现两个重要的逻辑缺陷:

用户的存款奖励是记录在 user.token0Rewards 和 user.token1Rewards 中的,并不与任何 PLP Token 或其他东西有任何形式的绑定。

用于取回存款收益的 collectFees 函数仅仅依赖于记账的 user.token0Rewards 和 user.token1Rewards 状态,即使用户并未持有 PLP Token,仍可以取出对应的存款奖励。

我们假想一个攻击流程:

攻击者向机池中存入一定的流动性,获得一部分 PLP Token。

攻击者调用 collectFees(0, 0),后者会更新攻击者的存款奖励,即状态变量 user.token0Rewards 的值,但并没有真正取回存款奖励。

攻击者将 PLP Token 转给自己控制的其他合约,再调用 collectFees(0, 0) 更新状态变量 user.token0Rewards。也就是说通过不断地流转 PLP Token 并调用 collectFees(0, 0),攻击者复制了这些 PLP Token 对应的存款奖励。

最后,攻击者从以上各个地址调用 collectFees 函数,取回真正的奖励。此时虽然这些账户中并没有 PLP Token,但由于记账在 user.token0Rewards 没有更新,攻击者因此得以取出多份奖励。

用现实生活中的例子来描述这个攻击,相当于我向银行存钱,银行给了我一张存款凭证,但这张凭证没有防伪措施也没有和我绑定,我把凭证复印了几份发给不同的人,他们每个人都凭借这个凭证向银行取回了利息。

通过以上的代码分析,我们发现了 Popsicle Finance 在机池实现上的漏洞。下面我们对攻击交易进行深入分析,看攻击者是怎样利用这个漏洞的。

攻击者的总体流程如下:

攻击者创建了三个交易合约。其中一个用于发起攻击交易,另外两个用于接收 PLP Token 并调用 Popsicle Finance 机池的 collectFees 函数取回存款奖励。

通过闪电贷从 AAVE 借出大量流动性。攻击者选择了 Popsicle Finance 项目下的多个机池,向 AAVE 借出了对应这些机池的六种流动性。

进行Deposit-Withdraw-CollectFees循环。攻击者一共进行了8 次循环,分别攻击了 Popsicle Finance 项目下的多个机池,取出了大量流动性。

向 AAVE 归还闪电贷,并将获利通过 Tornado Cash 。

本次攻击交易主要由数个 Deposit-Withdraw-CollectFees 循环构成,每一个循环的示意图如上图所示。根据我们的分析,逻辑如下:

攻击者首先将闪电贷借来的流动性存入机池中,获得一定量的 PLP Token。

攻击者将 PLP Token 转给攻击合约 2。

攻击合约 2 调用机池的 collectFees(0, 0) 函数,设置合约 2 对应的 user.token0Rewards 和 user.token1Rewards 状态。

攻击合约 2 将 PLP Token 转给攻击合约 3。

和攻击合约 2 的操作类似,攻击合约 3 调用机池的 collectFees(0, 0) 函数,设置合约 2 对应的 user.token0Rewards 和 user.token1Rewards 状态。

攻击合约 2 将 PLP Token 转回攻击合约,后者调用机池的 withdraw 函数 Burn 掉 PLP Token,取回流动性。

攻击合约 2 和攻击合约 3 调用 collectFees 函数,用虚假的 tokenRewards 状态取回了存款奖励。

根据我们的以太坊交易追踪可视化系统(https://tx.blocksecteam.com/)给出的交易调用图如下,其中部分重要交易用红字进行标注:

本次攻击一共获利: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 洗白。

标签:TOKENTOKTOKEKENitoken钱包官网版Arowana Tokenimtoken钱包官方版下载2.9.10itokenwallet安全吗

以太坊最新价格热门资讯
NFT:NFT 投资宝典:什么样的 JPG 值得购买和收藏?_ART

你以为新的一天会有一个新的 NFT 项目。不,不对,实际上更像是每天会有十到二十个新 NFT 项目冒出! 是吧,登录一下 Twitter ,你就会看到推特上的 NFT 大 V 们正在便宜兜售一些.

1900/1/1 0:00:00
DGE:跨链桥百家争鸣:新入局者 Celer cBridge 有何差异化优势?_MetaPlayers.gg

Celer cBridge 提供高速低成本跨链服务,不仅连通多个 Layer 1 区块链,还支持所有兼容 EVM 的二层网络和侧链等。比特币诞生十余载,区块链行业获得了长足的发展.

1900/1/1 0:00:00
cardano:金色观察 | Cardano硬分叉后将允许用户运行智能合约_CARD

概要1. Cardano硬分叉后,用户将能够运行智能合约。2. Charles Hoskinson认为,大部分即将到来的升级将发生在今年8月至9月之间.

1900/1/1 0:00:00
EFI:DeFi大潮下 加密金融机构应如何稳健掘金?_Ocean Swap Bridge

体量和种类不断增长的 DeFi 项目,为对收益极为敏感且操作方式极为灵活的加密金融机构提供了非常好的生息资产.

1900/1/1 0:00:00
加密货币:速览支付巨头的加密货币征途:Visa、MasterCard、PayPal 与 Square_CAR

全球支付巨头们正在积极布局加密货币,希望能够吃下这个行业早期快速发展的红利。2021 年 7 月 16 日,Square 首席执行官 Jack Dorsey 在推特上表示 Square 将开设一.

1900/1/1 0:00:00
BOB:理解闪电网络:结算并关闭支付通道_Highest Yield Savings Service

目前,Alice 和 Bob 已经开通了一个双向支付通道,并分别往通道中存入了 5btc。他们已经来回完成了两笔交易.

1900/1/1 0:00:00