0x01:前言
援引官方消息,北京时间12月19日,Fantom链上复合收益平台GrimFinance遭遇了闪电贷攻击。知道创宇区块链安全实验室第一时间对本次事件深入跟踪并进行分析。
0x02:事件详情
交易细节如下图所示:
浏览上图的交易过程可知,攻击合约利用闪电贷借取代币WFTM和BTC,将借取的代币与自己铸造的代币质押到SpiritSwap里增加流动性获取lp代币,而问题就出现在攻击者通过depositFor()实现质押的过程中。
通过Tenderly调试该笔交易,攻击者多次递归调用depositFor函数,利用该函数获取大量代币:
韩国农协银行完成CBDC模拟测试,其区块链平台集合以太坊和Hyperledger技术:8月17日消息,韩国农协银行宣布已完成央行数字货币(CBDC)模拟测试,并计划在年底前利用所建区块链平台验证各种数字资产相关商业模式,如 NFT 、Stablecoin(Nonghyup Bank Digital Currency,NHDC)和多资产电子钱包。
报道指出,农协银行建立的区块链平台是结合以太坊和 Hyperledger 技术,确保了区块链技术的可扩展性和灵活性。(韩联社)[2022/8/17 12:31:15]
0x03:漏洞分析
depositFor()函数位于的第1115行:
ETC官方:建议所有OpenEthereum节点切换到Hyperledger Besu最新版本:7月23日,ETC Cooperative官方发推文称,强烈建议所有ETC客户端OpenEthereum节点操作人员切换到最新的Hyperledger Besu版本。此前消息,7月17日,Hyperledger Besu官方宣布1.5版本已开放使用,性能将提升33%。7月22日,ETC官方宣布,ETC客户端OpenEthereum已被分离并命名为OpenETC。[2020/7/23]
function?depositFor(address?token,?uint?_amount,address?user?)?public?{
?uint256?_pool?=?balance();
?IERC20(token).safeTransferFrom(msg.sender,?address(this),?_amount);
Hyperledger执行董事:理想的区块链应用应对社会产生积极影响:Hyperledger执行董事Brian Behlendorf表示,针对区块链应用发展的理想方案是,将积极的社会影响与激励不同参与者的积极财务影响结合起来,或者采取双重底线的方式。而纯粹只创造积极社会影响的区块链,可能其采用具有挑战性。(CoinDesk)[2020/3/4]
?earn();
?uint256?_after?=?balance();
?_amount?=?_after.sub(_pool);?//?Additional?check?for?deflationary?tokens
?uint256?shares?=?0;
?if?(totalSupply()?==?0)?{
动态 | Grin开发者David Burkett已更新首份莱特币MimbleWimble开发进展文档:Grin开发者David Burkett已更新了其首份莱特币MimbleWimble开发进展文档。Burkett声称以后将按月发布更新状况,详细介绍开发进展,除莱特币MimbleWimble开发工作外,还会讨论关于Grin++的变化。[2019/12/2]
??shares?=?_amount;
?}?else?{
??shares?=?(_amount.mul(totalSupply())).div(_pool);
?}
?_mint(user,?shares);
}
该函数的safeTransferFrom()方法从IERC20(token)调用,调用完该方法后,余额balance也会随之变动,最后通过_mint()方法向用户添加质押凭证代币。其中调用的变量token可控,导致攻击者可以自己实现safeTransferFrom()方法,将该方法重入到depositFor()发起攻击。
动态 | 非盈利组织AI Grid Foundation为其区块链项目募集2000万美元:据unhashed消息,AI Grid Foundation今天宣布已经募集了2000万美元资金用于其区块链项目项目ELONCITY,该项目还将拥有自己的令牌协议,这将有助于客户参与能源交换。核财经App注:AI Grid Foundation是一个总部设在新加坡的非营利组织,倡导使用去中心化的可再生能源来解决集中式电网面临的紧迫问题。[2018/10/1]
以实施了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方法实现套利,而闪电贷?攻击者只是利用闪电贷扩大了套利值。
对于合约代码而言安全性是十分重要的,每一个未经验证的传入参数都可能导致巨大的经济损失,开发者在编写重要操作方法时,须记住零信任原则,谨慎对待每一个传入参数。
来源:金色财经
标签:TOKENTOKRESTOKEimtoken转账赚钱局Zenfuse TokenRES币imtoken钱包app苹果版
蔡文胜,著名天使投资人、现任美图秀秀董事长,在2000年互联网泡沫破裂时进入互联网领域,投资域名并获得巨大成功。2003年5月,创办265.com,并于2007年被Google收购.
Instagram可能会是最新的一家拥抱NFT的公司,随着越来越多的市场热议。如果Instagram对NFT的整合付诸实践,那么采用NFT的人次可达10亿以上.
随着数字时代的不断发展,互联网也发生了巨大的变化。近年来,越来越多人讨论Web3.0(Web3)一词.
2021年,随着业内第一股Roblox上市,“元宇宙/metaverse”概念忽然兴起,“元宇宙+”成为了席卷互联网、VR/AR和金融投资界等各大产业的新风潮,一时之间.
原文作者:Bankless联合创始人DavidHoffman原文来源:Bankless 原文编译:元宇宙之道 在我们总结这一年之际,我想借此机会拉远镜头并重新聚焦.
背景 元宇宙发展至此,似乎已经成了被调侃的工具,好像什么东西都可以加个“元”,网络上流传的“元防水”成了人们茶余饭后的笑料,也因此人们对元宇宙的印象大打折扣,认为其就是一个概念炒作.