宇宙链 宇宙链
Ctrl+D收藏宇宙链
首页 > ETH > 正文

空手套白狼:Popsicle 被黑分析

作者:

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

2021 年 08 月 04 日,据慢雾区消息,跨链收益率平台 Popsicle Finance 的 Sorbetto Fragola 产品遭受黑客攻击,慢雾安全团队第一时间介入分析,并将结果分享如下。

攻击背景

在本次攻击中,攻击者通过创建 3 个攻击合约来完成对 Sorbetto Fragola 的攻击,以下是本次攻击涉及的具体地址:

攻击者:

H1:0x3A9D90eD069021057d9d11E78F142F2C4267934A

H2:0xf9E3D08196F76f5078882d98941b71C0884BEa52

攻击合约:

C1:0xdFb6faB7f4bc9512d5620e679E90D1C91C4EAdE6

C2:0x576cf5f8ba98e1643a2c93103881d8356c3550cf

C3:0xd282f740bb0ff5d9e0a861df024fcbd3c0bd0dc8

Sorbetto Fragola:

0xc4ff55a4329f84f9Bf0F5619998aB570481EBB48

攻击对象

通过官方的介绍我们可以知道被攻击的 Sorbetto Fragola 产品主要是用于帮助用户管理 Uniswap V3 头寸,以避免用户在 Uniswap V3 做市的头寸超出所选定的价格范围。用户可以在 Sorbetto Fragola 中存入提供流动性对应的两种代币,Sorbetto Fragola 会给到用户 Popsicle LP (PLP) 凭证,用户使用此凭证可以获取奖励并取回抵押的流动性资金,同时此凭证也是可以随意转移给其他用户的。

数据:ParaFi Capital于2小时前将2000枚MKR转至Coinbase:金色财经报道,据SpotonChain数据显示,被标记为ParaFiCapital的地址于5小时前解锁5000枚MKR,并2小时前将其中2000枚MKR(约合143万美元)转移至Coinbase。

ParaFi Capital是2020年MakerDAO的投资者之一。他们曾于2021年和2022年通过Coinbase平台和Gensis Trading OTC囤积17,000枚MKR(当时的价格为2,922美元)。[2023/4/20 14:15:45]

攻击核心

此次攻击的核心在于,Sorbetto Fragola 中通过用户持有的 PLP 凭证数量来参与计算用户所能获得的奖励,但 PLP 凭证是可以随意转移给其他用户的,但其凭证转移的过程中没有进行奖励结算转移等操作。这就导致了只要持有 PLP 凭证就可以立即获取奖励。最终造成同个 PLP 凭证却能在同个时间节点给多个持有者带来收益。接下来我们对整个攻击细节进行详细分析。

攻击细节

攻击首先通过 H1 地址创建了攻击合约 C1、C2 与 C3,随后攻击者通过 H2 地址调用了攻击合约 C1 开始进行具体的攻击,交易为:

0xcd7dae143a4c0223349c16237ce4cd7696b1638d116a72755231ede872ab70fc。

通过分析此交易我们可以发现,其先从 AAVE 中利用闪电贷借出了 30,000,000 个 USDT、13,000 个 WETH、1,400 个 WBTC、30,000,000 个 USDC、3,000,000 个 DAI、200,000 个 UNI,为后续在 Sorbetto Fragola 中提供流动性获得 PLP 凭证做准备。

Bitfinex Securities在哈萨克斯坦阿斯塔纳开设新办事处:2月24日消息,Bitfinex Securities是一家由 Bitfinex 提供支持的完全受监管的交易所,能够发行和交易包括股票和债券在内的代币化证券,在哈萨克斯坦阿斯塔纳开设一个重要的新区域办事处。

除了与阿斯塔纳金融服务管理局 (AFSA) 监管机构进行定期和直接接触外,该办公室还展示了Bitfinex Securities对证券代币行业对哈萨克斯坦国内经济未来增长和发展的看法。[2023/2/24 12:27:20]

随后攻击者调用 Sorbetto Fragola 合约的 deposit 函数存入提供流动性对应的两种代币 (这里以攻击者首次存入的 WETH 与 USDT 代币为例),其会先通过 checkDeviation 与 updateVault 修饰器分别检查价格与更新奖励。价格检查主要是针对价格是否出现大波动被操控等情况,这里不做展开。而奖励更新就与本次攻击密切相关了,我们切入分析:

可以看到其调用了 _updateFeesReward 函数进行具体的更新操作,我们跟进此函数:

比特币全网未确认交易数量为3235笔:金色财经报道,BTC.com数据显示,目前比特币全网未确认交易数量为3235笔,全网算力为275.71 EH/s,24小时交易速率为3.62交易/s。目前全网难度为37.59 T,预测下次难度下调0.34%至37.46 T,距离调整还剩8天21小时。[2023/1/21 11:24:06]

从上图我们可以很容易的发现其先通过 positionLiquidity 函数获取 tickLower 与 tickUpper 范围内合约所持有的流动性数量。然后通过 _earnFees 函数从 Uniswap V3 Pool 中收取提供流动性奖励。之后再通过 _tokenPerShare 函数计算每个 PLP 凭证所能分得的流动性奖励。最后通过 _fee0Earned 与 _fee1Earned 函数来计算用户所持有的 PLP 凭证数量可以获得多少奖励,并使用user.token0Rewards 与 user.token1Rewards 变量进行记录,如下图所示:

数据:方舟基金在近一周增持价值975万美元的Coinbase股票:9月12日消息,数据显示,ARK方舟基金在过去一周累计增持120654股Coinbase股票COIN,按当前价格估算,价值约975万美元。期间,ARK仅减持24140股COIN。[2022/9/12 13:23:46]

但由于此时攻击者刚进行充值操作,还未获得 PLP 凭证,因此其 user.token0Rewards 与 user.token1Rewards 变量最终记录的自然是 0。

看到这里你可能已经意识到问题所在了,既然 user.token0Rewards 与 user.token1Rewards 变量记录的奖励是根据用户持有的 PLP 凭证进行计算的,且 PLP 凭证是可以转移的,那么是否只要持有 PLP 凭证再去触发此变量记录奖励就可以让我们获得奖励。答案自然是肯定的。我们继续看 deposit 函数:

在奖励更新之后通过 liquidityForAmounts 函数计算出在目标价格区间内用户提供资金所占的流动性然后调用 Uniswap V3 Pool  mint 函数注入流动性。随后通过 _calcShare 计算出 Sorbetto Fragola 所需要铸造给用户的 PLP 凭证数量。

在攻击者获得 PLP 凭着后也正如我们所想的那样将 PLP 凭证转移给其他地址,并调用 Sorbetto Fragola 合约 collectFees 函数来进行奖励记录。

前纽约联储行长:加密货币监管拖得越久就会越严厉:金色财经报道,尽管像比特币这样的加密货币越来越受欢迎,并被接受为更传统资产的有效替代品,但十多年来,市场基本上没有受到监管。2009 年至 2019 年间担任纽约联邦储备银行行长的美国经济学家比尔·杜德利表示,这种情况持续的时间越长,对加密货币的监管打击就可能越严厉。根据 Dudley 的说法,区块链和加密技术有其缺点,但也有一些潜在的好处:它可以创建一个更好的身份和隐私系统。它可以帮助跟踪并验证国际销售商品的所有权。它可以极大地改善支付方式,让更多人以更低的成本 24/7 全天候使用,特别是对于移民工人进行的小额、频繁的交易。然而,达德利认为,数字金融的理想未来需要审慎监管。他赞扬美国总统乔·拜登的行政命令在这件事上定下了正确的基调,但也批评它没有采取足够措施确保在该行业不受约束的增长造成重大破坏和损失之前采取行动。(finbold)[2022/4/27 2:35:00]

通过上图的 PLP 凭证链上转移记录我们可以看到,在攻击合约 C1 获得 PLP 凭证后,将其转移给了攻击合约 C2,随后调用了 collectFees 函数。之后攻击合约 C2 再将 PLP 凭证转移给攻击合约 C3 再次调用了 collectFees。最后攻击合约 C3 将 PLP 凭证转移回攻击合约 C1。我们切入 collectFees 函数进行分析:

通过上图我们可以很容易的看出此函数也有 updateVault 修饰器,而经过上面的分析我们可以知道 updateVault 修饰器用于奖励更新,因此在攻击合约 C2 持有 PLP 凭证的情况下调用 collectFees 函数触发 updateVault 修饰器则会根据其持有的 PLP 凭证数量来计算应分得的奖励,并记入用户的 token0Rewards 与 token1Rewards 变量。需要注意的是此时对于此类 PLP 凭证持有者缓存的 tokenPerSharePaid 变量是 0,这直接导致了用户可以获得 PLP 凭证持有奖励。

我们从链上状态的变化也可以看出:

随后攻击合约 C2 也如法炮制即可获得奖励记录。

最后 PLP 凭证转移回到攻击合约 C1,并调用了 Sorbetto Fragola 合约的 withdraw 函数燃烧掉 PLP 凭证取回先前存入的 WETH 与 USDT 流动性。并且攻击合约 C2、C3 分别调用 collectFees 函数传入所要领取的奖励数量以领取奖励。这样攻击者在同个区块中不仅拿回了存入的流动性还额外获得多份流动性提供奖励。

随后攻击者开始利用其他的代币对如法炮制的薅取奖励,如下图所示:

攻击流程

1、攻击者创建多个攻击合约,并从 AAVE 中利用闪电贷借出大量的代币;

2、攻击者使用借来的代币存入 Sorbetto Fragola 合约中获得 PLP 凭证;

3、攻击者利用 Sorbetto Fragola 合约的奖励结算缺陷问题将获得的 PLP 凭证在其创建的攻击合约之间进行转移并分别调用了 Sorbetto Fragola 合约的 collectFees 函数来为各个攻击合约纪录奖励;

4、攻击者燃烧 PLP 凭证取回在 Sorbetto Fragola 合约中存入的流动性资金,并通过各个攻击合约调用 Sorbetto Fragola 合约的 collectFees 函数来获取纪录的奖励;

5、不断的循环上述操作攻击各个流动性资金池薅取奖励;

6、归还闪电贷获利走人。

MistTrack 分析过程

慢雾 AML 团队分析统计,本次攻击损失了约 4.98M USDT、2.56K WETH、96 WBTC、5.39M USDC、159.93K DAI、10.49K UNI,接近 2100 万美元。

资金流向分析

慢雾 AML 旗下 MistTrack 反追踪系统分析发现,攻击者 H1 地址首先从 Tornado.Cash 提币获取初始资金随后部署了三个攻击合约:

攻击获利后通过 Uniswap V3 将获得的代币兑换成 ETH 再次转入了 Tornado.Cash:

目前攻击者账户余额仅为 0.08 ETH,其余资金均已通过 Tornado.Cash 进行转移。

总结

本次漏洞的核心在于由于奖励更新记录缺陷导致同个 PLP 凭证能在同个时间节点给多个持有者都带来收益。针对此类漏洞,慢雾安全团队建议在进行凭证转移前应处理好奖励结算问题,记录好转移前后用户的奖励缓存,以避免再次出现此类问题。

标签:SORBETTOLAFRASoraBetterBettingCryptosolartechFRAPPE价格

ETH热门资讯
独家 | 一文教你如何保护你辛苦囤的币 不被黑客钓走

在数字货币投资者中,说起“钓鱼”欺诈,很多朋友都不会陌生。2020年2月,据金色财经报道,有数字货币投资者在社区表示,有账号在空投Voice代币,但其中memo出现的网站为钓鱼网站.

1900/1/1 0:00:00
Web3.0代币将成为下一个热点?市场数据告诉你答案

尽管最近加密资产普遍下跌,但Livepeer(LPT)和Bittorent(BTT)等Web3.0代币的价格却在今年飙升.

1900/1/1 0:00:00
金色前哨|人民银行2021年下半年工作会议摘要

据中国人民银行官网消息,7月30日,人民银行召开了2021年下半年工作会议,传达学习党中央、国务院关于当前经济形势的总体判断及做好下半年经济工作的重要部署,总结上半年人民银行系统各项工作,明确下半年重点任务.

1900/1/1 0:00:00
HashKey 郝凯:解析 Aave Pro 潜在影响及 DeFi 趋势

Aave Pro 为机构用户参与 DeFi 提供了新的通道,但也可能随之带来公平性和中心化等问题。Aave 是一个去中心化、开源、非托管的借贷平台.

1900/1/1 0:00:00
金色前哨 | SpaceX联合GEC探索太空广告业务 只支持加密货币支付

据businessinsider消息报道,未来广告也将飞向太空。提供技术服务的加拿大初创公司 Geometric Energy Corporation (GEC) 指出,它正在 SpaceX 的帮助下使在太空中打广告成为可能.

1900/1/1 0:00:00
算法稳定币:稳中求变

市场和社区对于「理想型」算法稳定币的追求仍在继续。AMPL 因 Aave 的提案再次被推至风口浪尖。7 月 4 日这天,AMPL 突破 1.042 美元,进入增发阶段.

1900/1/1 0:00:00