火星链 火星链
Ctrl+D收藏火星链

RES:Grim Finance 闪电贷安全事件分析

作者:

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

0x01:前言

援引官方消息,北京时间12月19日,Fantom链上复合收益平台GrimFinance遭遇了闪电贷攻击。知道创宇区块链安全实验室第一时间对本次事件深入跟踪并进行分析。

0x02:事件详情

交易细节如下图所示:

浏览上图的交易过程可知,攻击合约利用闪电贷借取代币WFTM和BTC,将借取的代币与自己铸造的代币质押到SpiritSwap里增加流动性获取lp代币,而问题就出现在攻击者通过depositFor()实现质押的过程中。

通过Tenderly调试该笔交易,攻击者多次递归调用depositFor函数,利用该函数获取大量代币:

Web3社区构建平台Galxe集成LayerZero:金色财经报道,Web3社区构建平台Galxe在社交媒体表示,全链互操作协议LayerZero已经整合Galxe,3个合作伙伴将通过在Galxe上开展活动。[2023/8/13 16:23:13]

0x03:漏洞分析

depositFor()函数位于的第1115行:

function?depositFor(address?token,?uint?_amount,address?user?)?public?{

?uint256?_pool?=?balance();

Paxful CEO:88%被冻结账户已解冻,自己卸任前不会卷款跑路:4月17日消息,Paxful 联合创始人 Ray Youssef 向债权人保证,该平台处于托管人的监管之下,他不会卷款,因为那样做会毁掉自己的名誉。据悉,两周前 Paxful 宣布停止运营,同时不确定该平台是否会重新开放。

Ray Youssef 还指出,Paxful 仍有 440 万美元的被冻结资金,约占所有不能提现的客户资金的 3.3%。但作为其担任首席执行官的最后一项行动,Youssef 还透露,在经过 10 天的努力后,88% 的被冻结账户已被解冻,为了解冻这些账户,我放弃了首席执行官的头衔,我也冒着被判藐视法庭的风险。[2023/4/17 14:09:18]

?IERC20(token).safeTransferFrom(msg.sender,?address(this),?_amount);

LAMINA1任命技术主管 Rebecca Barkin 为总裁:金色财经报道,?LAMINA1是专为元宇宙打造的Layer 1 区块链,已任命经验丰富的技术主管 Rebecca Barkin 为总裁。[2022/8/26 12:51:13]

?earn();

?uint256?_after?=?balance();

?_amount?=?_after.sub(_pool);?//?Additional?check?for?deflationary?tokens

?uint256?shares?=?0;

?if?(totalSupply()?==?0)?{

??shares?=?_amount;

元宇宙项目Bloktopia更改代币释放机制,投资者需持有25%代币或延长至10年归属期:8月9日消息,元宇宙项目Bloktopia宣布在与私人投资者协商后,决定改变剩余75%代币的释放方式,以支持Bloktopia的长期增长并保护BLOK代币价格。

具体而言,Bloktopia提供了两种方式供投资者选择,第一种方式是在最近5次分配中持有至少25%的代币,并继续持有所有未来分配的40%,只允许出售60%。

未能满足该要求将自动触发投资者转移到第二种方式,即延长归属时间表以在10年内分配代币,从下一次分配时间开始有5年的锁定期。

如果投资者选择第一种方式,需要从公开市场回购代币,并在2022年8月16日之前存入最低要求的25%。[2022/8/9 12:13:14]

?}?else?{

经济日报:比特币暴跌还需警惕归零风险:6月22日消息,经济日报评论称,频繁暴跌下,比特币投资风险已展露无遗。相较于6.9万美元的高点,目前看似跌幅已深,但还需警惕清零风险。比特币不过是一串数字代码,收益主要来自低买高卖的价差,未来一旦出现投资者信心崩塌不再“接盘”,或美国等主权国家宣布比特币非法等情况时,比特币将回归其一文不值的原本价值。投资者不可抱着抄底的想法贸然入场,以免被“割韭菜”。[2022/6/22 4:44:31]

??shares?=?(_amount.mul(totalSupply())).div(_pool);

?}

?_mint(user,?shares);

}

该函数的safeTransferFrom()方法从IERC20(token)调用,调用完该方法后,余额balance也会随之变动,最后通过_mint()方法向用户添加质押凭证代币。其中调用的变量token可控,导致攻击者可以自己实现safeTransferFrom()方法,将该方法重入到depositFor()发起攻击。

以实施了5次重入攻击为例,开始_pool的值为0,在重入depositFor方法的前四次里,攻击者一直传入自己铸造的代币,_pool的值会一直保持为0,但在第五次,也就是最后一次传入100个受认可的代币时,_after的值会变成100,而_afer-_pool的差值_amount也就是100,最后由于重入了5次,导致合约会向攻击者铸造100*5的质押凭证代币。

其后果就是攻击者向该合约质押自己铸造不受认可的代币,同样会增加质押总量,最后利用多出来的质押凭证实现套利。

0x04:修复方案

1.由于depositFor()方法里的token可控才是导致这次攻击事件的原因,因此只需要在传递参数的时候让token不可控就行:

function?depositFor(?uint?_amount,address?user?)?public

2.由于套利的原因是depositFor()方法里存在修改代币数量的函数,因此还可以将修改代币的方法单独实现,这样即使token变量可控,也无法成功套利:

function?depositFor(address?token,?uint?_amount,address?user?)?public?{

?IERC20(token).safeTransferFrom(msg.sender,?address(this),?_amount);

}

3.锁定交易token:

function?setLPToken(address?lp)?public?onlyOwner?{

lpToken?=?lp;

}

function?depositFor(uint?_amount,address?user?)?public?{

uint256?_pool?=?balance();

IERC20(lpToken).safeTransferFrom(msg.sender,?address(this),?_amount);

earn();

......

}

0x05:总结

经过完整分析,知道创宇区块链安全实验室明确了该次攻击事件的源头并非网传的闪电贷攻击,攻击者利用GrimBoostVault合约的depositFor方法参数可控,实施了重入攻击,将自己的铸造的无价值代币兑换成了质押凭证,最后通过withdrawAll方法实现套利,而闪电贷?攻击者只是利用闪电贷扩大了套利值。

对于合约代码而言安全性是十分重要的,每一个未经验证的传入参数都可能导致巨大的经济损失,开发者在编写重要操作方法时,须记住零信任原则,谨慎对待每一个传入参数。

来源:金色财经

标签:KENTOKENRESTOKEBDF Tokensupertxtokenares币有价值吗Zenfuse Token

fil币价格今日行情热门资讯
SHI:金色早报 | 蔡维德:中国将打造自己的元宇宙

头条▌蔡维德:中国将打造自己的元宇宙12月26日消息,近日,“元宇宙融媒”一行走进位于北京金融安全产业园内的北京天德科技有限公司.

1900/1/1 0:00:00
PUN:Bored Ape Yacht Club NFT的地板价超过CryptoPunks

据OpenSea的数据,目前出售的最便宜的BoredApeNFT的价格是53.9ETH,而CryptoPunk的最低要价是52.69ETH,目前价值210,239美元.

1900/1/1 0:00:00
EFI:金色Web3.0日报 | 可口可乐以盲盒形式推出节日雪花球NFT

DeFi数据1.DeFi代币总市值:1454亿美元DeFi总市值数据来源:Coingecko2.过去24小时去中心化交易所的交易量:61.

1900/1/1 0:00:00
元宇宙:NFT全球搜索量超过Crypto NFT热度未减的背后到底有什么价值

大家好,我是团子,价值投资虽然不能保证我们稳步盈利,但价值投资给我们提供了走向真正成功的唯一机会。眼睛仅盯在自己小口袋的是小商人,眼光放在世界大市场的是大商人.

1900/1/1 0:00:00
USD:12/23 价格分析:BTC、ETH、BNB、SOL、ADA、XRP、LUNA、AVAX、DOT

比特币和大多数主要的山寨币正试图复苏,以稳固的基础在年底结束。?比特币(?BTC?)正试图突破50,000美元的心理临界水平,并以强劲的势头结束今年.

1900/1/1 0:00:00
WEB:晚间必读5篇 | 福布斯:Web 3.0如何影响未来就业?

1.金色硬核|怎么部署一个JPGNFT项目?在本教程结束时,你应该了解如何使用层以编程方式构建任意数量的图像,列出它们的特征,然后将其放入所有“链上”开始建立你的社区.

1900/1/1 0:00:00