成都链安:损失近2070万美元 防不胜防?Popsicle Finance被攻击事件全解析

8月4日,链必安-区块链安全态势感知平台(Beosin-Eagle Eye)舆情监测显示,跨链收益率提升平台Popsicle Finance下Sorbetto Fragola产品遭到攻击,导致了约2070万美元的损失,攻击者共获利2.6K WETH,5.4M USDC,5M USDT,160K DAI,10K UNI,和96 WBTC。

事件概览

攻击如何发生 Event overview

首先,跟我们了解一下Popsicle Finance是什么?

这是一个很有意思的项目,主要做跨链流动性挖矿。在DeFi 大热的时候,大家都在找流动性挖矿的机会,希望让自己的资产收益最大化。但因以太坊主网 gas 费用居高不下,给了二层、侧链、其他区块链迅速发展壮大的机会。在多链时代下,Popsicle Finance就在这样的背景下诞生了。

成都链安:损失近2070万美元 防不胜防?Popsicle Finance被攻击事件全解析

在遭到黑客攻击后,Popsicle Finance团队成员立即发推表示,目前仅有 Sorbetto Fragola 一款产品受到影响。团队将在几周内修复漏洞并对用户损失进行赔偿。

成都链安:损失近2070万美元 防不胜防?Popsicle Finance被攻击事件全解析

事件具体分析

攻击者如何得手 Event overview

攻击者地址:

0xf9E3D08196F76f5078882d98941b71C0884BEa52

攻击合约:

A:

0xdfb6fab7f4bc9512d5620e679e90d1c91c4eade6

B:

0x576Cf5f8BA98E1643A2c93103881D8356C3550cF

C:

0xd282f740Bb0FF5d9e0A861dF024fcBd3c0bD0dc8

攻击交易:

0xcd7dae143a4c0223349c16237ce4cd7696b1638d116a72755231ede872ab70fc

攻击者使用相同的攻击方式获利了多种代币,以下以USDT为例分析:

Round 1

攻击者使用合约A通过闪电贷获取USDT和ETH。

成都链安:损失近2070万美元 防不胜防?Popsicle Finance被攻击事件全解析

Round 2

通过合约A调用SorbettoFragola的deposit函数获取凭证代币PLP。

成都链安:损失近2070万美元 防不胜防?Popsicle Finance被攻击事件全解析

Round 3

将PLP发送给合约B并执行SorbettoFragola的collectFee函数,这时输入的amount均为0,更新合约B的奖励参数。之后将PLP发送到合约C,进行同样的操作。合约C完成操作后将PLP发送回合约A。

成都链安:损失近2070万美元 防不胜防?Popsicle Finance被攻击事件全解析

成都链安:损失近2070万美元 防不胜防?Popsicle Finance被攻击事件全解析

成都链安:损失近2070万美元 防不胜防?Popsicle Finance被攻击事件全解析

成都链安:损失近2070万美元 防不胜防?Popsicle Finance被攻击事件全解析

因为合约B、C持币,所以会计算更新其奖励(不随代币转移清空),更新后的数值如下图所示:

成都链安:损失近2070万美元 防不胜防?Popsicle Finance被攻击事件全解析

成都链安:损失近2070万美元 防不胜防?Popsicle Finance被攻击事件全解析

Round 4

合约A执行SorbettoFragola的withdraw函数,销毁PLP代币。取出本金后更新相关参数为最新。

成都链安:损失近2070万美元 防不胜防?Popsicle Finance被攻击事件全解析

Round 5

接着合约B与合约C再度执行collectfee函数。

成都链安:损失近2070万美元 防不胜防?Popsicle Finance被攻击事件全解析

输入的amount为上面更新后的数值tokenReward。

成都链安:损失近2070万美元 防不胜防?Popsicle Finance被攻击事件全解析

成都链安:损失近2070万美元 防不胜防?Popsicle Finance被攻击事件全解析

这时因为满足此处条件,所以会到pool地址(UNIV3的对应交易对地址)去移除流动性,并将代币发送给合约B、C。

成都链安:损失近2070万美元 防不胜防?Popsicle Finance被攻击事件全解析

Round 6

合约C再次调用collectfee函数获利。

成都链安:损失近2070万美元 防不胜防?Popsicle Finance被攻击事件全解析

此时amount如下图所示:

成都链安:损失近2070万美元 防不胜防?Popsicle Finance被攻击事件全解析

最后,满足调用pay函数的条件,通过pay函数向合约C发送代币。

成都链安:损失近2070万美元 防不胜防?Popsicle Finance被攻击事件全解析

成都链安:损失近2070万美元 防不胜防?Popsicle Finance被攻击事件全解析

事件复盘

我们需要注意什么 Case Review

Popsicle Finance最初管理的是跨链流动性,于6月26日推出Sorbetto Fragola以管理Uniswap v3流动性。

项目方应该也没有预料到,黑客会在今日进行攻击,导致了约2070万美元的损失。可见,安全预判是多么重要。

成都链安:损失近2070万美元 防不胜防?Popsicle Finance被攻击事件全解析

注意

成都链安在此建议,对于项目方而言,在PLP转移时,应该重新计算并更新PLP发送方与接收方的奖励值,避免奖励重复发放。此外,项目的逻辑缺陷一定要得到重视。