0x01:前言
援引官方消息,北京时间12月19日,Fantom链上复合收益平台GrimFinance遭遇了闪电贷攻击。知道创宇区块链安全实验室第一时间对本次事件深入跟踪并进行分析。
0x02:事件详情
交易细节如下图所示:
浏览上图的交易过程可知,攻击合约利用闪电贷借取代币WFTM和BTC,将借取的代币与自己铸造的代币质押到SpiritSwap里增加流动性获取lp代币,而问题就出现在攻击者通过depositFor()实现质押的过程中。
通过Tenderly调试该笔交易,攻击者多次递归调用depositFor函数,利用该函数获取大量代币:
Do Kwon曾于去年七、八月份向韩国一家律师事务所汇款450万美元:金色财经报道,首尔南区检察官办公室金融犯罪部门发现Terraform Labs首席执行官兼创始人Do Kwon于2022年7月和8月向韩国一家律师事务所汇款450万美元。消息人士还称,Do Kwon在2022年9月经迪拜前往塞尔维亚后,继续向该律师事务所汇款。
此前报道,在Do Kwon被黑山当局逮捕后,美国检方对Do Kwon提起刑事欺诈指控,并寻求将Do Kwon引渡到美国。韩国检方也寻求引渡Terra创始人Do Kwon。[2023/3/24 13:24:02]
0x03:漏洞分析
欧盟议会根据数据法通过智能合约监管:金色财经报道,当地时间本周二,欧洲议会以 500 票赞成、23 票反对通过了《数据法》的相关立法,该立法及其关于智能合约的规定并未明确针对加密行业,但业内一些人担心,如果范围没有明确定义,数据法案可能会对加密产生深远影响,尤其是在智能合约方面。据悉,智能合约属于欧盟《数据法》第 30 条的规定,即“关于数据共享智能合约的基本要求”, 条款包括“严格的访问控制机制”和集成到智能合约设计中的商业秘密保护。需要有终止或中断交易机制的可能性,在哪些条件下允许终止或中断交易需要立法者决定。(The Block)[2023/3/14 13:03:35]
depositFor()函数位于的第1115行:
function?depositFor(address?token,?uint?_amount,address?user?)?public?{
日本游戏巨头Square Enix总裁:将坚持区块链投资战略:金色财经报道,日本游戏巨头SquareEnix总裁Yosuke Matsuda在其年度信函中表示,SquareEnix致力于在全球范围内发展其高清游戏业务,并将坚持区块链投资战略。在新业务领域方面,该公司表示将投资于三个领域。其中,它最关注的是区块链娱乐。
他补充说,从外部来看,区块链作为一个领域在2022年获得了重大认可,Web3.0成为商业人士中牢固确立的流行语就是证明。此外,Yosuke Matsuda表示,该公司有多个基于原创IP的区块链游戏正在开发中,其中一些是去年宣布的,该公司准备在今年推出更多游戏。[2023/1/1 22:19:17]
?uint256?_pool?=?balance();
?IERC20(token).safeTransferFrom(msg.sender,?address(this),?_amount);
美股三大指数均大幅收涨,标普500指数涨1.56%:金色财经消息,行情显示,美股高开高走,三大指数均大幅收涨。纳指涨2.59%,标普500指数涨1.56%,道指涨1.28%。[2022/8/4 2:57:38]
?earn();
?uint256?_after?=?balance();
?_amount?=?_after.sub(_pool);?//?Additional?check?for?deflationary?tokens
?uint256?shares?=?0;
?if?(totalSupply()?==?0)?{
??shares?=?_amount;
?}?else?{
报告:预计到2027年全球NFT市场规模将达98.45亿美元:6月28日消息,根据Reportlinker.com发布的NFT市场研究报告,据估算,2021年全球NFT市场规模为31.8478亿美元,预计2022年将达到38.3576亿美元,预计到2027年将达到98.45亿美元,复合年均增长率将达到20.69%。(GlobeNewswire)[2022/6/28 1:36:28]
??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方法实现套利,而闪电贷?攻击者只是利用闪电贷扩大了套利值。
对于合约代码而言安全性是十分重要的,每一个未经验证的传入参数都可能导致巨大的经济损失,开发者在编写重要操作方法时,须记住零信任原则,谨慎对待每一个传入参数。
来源:金色财经
标签:RESTOKETOKFORRESQ币APPLE PROTOCOL TOKENNero TokenPlatform of meme coins
农民世界社区请愿书 风靡链游圈的农民世界终于崩盘了,其实并不意外,甚至可以说这个结果是早已注定的。农民世界的崩盘,也意味着这些“野生”链游恣意生长的时代终于走向末路.
1900/1/1 0:00:00大家好,我是团子,价值投资虽然不能保证我们稳步盈利,但价值投资给我们提供了走向真正成功的唯一机会。眼睛仅盯在自己小口袋的是小商人,眼光放在世界大市场的是大商人.
1900/1/1 0:00:00由于与AlchemyPay的新集成,Avalanche宣布在其网络上集成灵活的法定支付入口。AlchemyPay是一种连接法定货币和加密经济的支付解决方案,现在它将支持Avalanche公共区块.
1900/1/1 0:00:00大家好,我是团子,价值投资虽然不能保证我们稳步盈利,但价值投资给我们提供了走向真正成功的唯一机会。眼睛仅盯在自己小口袋的是小商人,眼光放在世界大市场的是大商人.
1900/1/1 0:00:002021年下半年,“元宇宙”绝对称得上科技乃至资本领域的弄潮儿。互联网包括虚拟现实技术的发展,DeFi的发展,同时加持人类关于虚拟世界的想象使得元宇宙的概念轮廓初具模型.
1900/1/1 0:00:00DeFi数据1.DeFi代币总市值:1609.16亿美元DeFi总市值数据来源:Coingecko2.过去24小时去中心化交易所的交易量:60.
1900/1/1 0:00:00