Agave Finance是以被动收入奖励存款人,并允许他们使用存款作为抵押品借入和借出数字资产。
零时科技区块链安全情报平台监控到消息,北京时间2022年3月15日,Agave Finance称遭到黑客攻击,目前已暂停相关合约,零时科技安全团队及时对此安全事件进行分析。
-
攻击者钱包地址
https://blockscout.com/xdai/mainnet/address/0x0a16A85BE44627C10cEe75db06b169C7Bc76de2c/transactions
-
攻击者合约地址
https://blockscout.com/xdai/mainnet/address/0xF98169301B06e906AF7f9b719204AA10D1F160d6/transactions
-
攻击交易
https://blockscout.com/xdai/mainnet/tx/0xa262141abcf7c127b88b4042aee8bf601f4f3372c9471dbd75cb54e76524f18e
-
PermittableToken合约
https://blockscout.com/xdai/mainnet/address/0xf8D1677c8a0c961938bf2f9aDc3F3CFDA759A9d9/contracts
先来看一下攻击者获利的一笔交易操作:
步骤一:攻击者利用攻击合约进行闪电贷获得2728枚WETH
步骤二:攻击者将获取的2728枚WETH存入Agave的贷款池,随后在Agave借贷中相继取出3305枚WETH,243423枚USDC,24563枚LINK,16.76枚WBTC,8400枚GNO,347787枚WXDAI。
步骤三:攻击者将获取的243423枚USDC,24563枚LINK,16.76枚WBTC,8400枚GNO,347787枚WXDAI资产转至攻击者钱包地址。
步骤四:攻击者归还闪电贷借款及其闪电贷手续费共2737枚WETH。
步骤五:在下一笔交易中,攻击者将获利的567枚WETH资金转至攻击者钱包。
至此,攻击者通过闪电贷获取资金在Agave借贷平台进行借出借入,从Agave借贷平台存款一次,多次取出借贷资金获利,该笔交易中,攻击者共获取567枚WETH,243423枚USDC,24563枚LINK,16.76枚WBTC,8400枚GNO,347787枚WXDAI,价值超过22万美元。
攻击者存款作为抵押品Agave借贷合约,随后通过Agave借贷合约多次借贷获利,由于Agave合约为AAVE合约分支,未有已知的安全风险,这里直接来分析本次漏洞发生的核心Gnosis官方链上桥接代币合约实现回调函数,主要是PermittableToken合约的callAfterTransfer方法。
该笔交易中,攻击者callAfterTransfer回调去触发借贷进行下一次转账,这里有一个细节,用户每次向合约借贷转出资金未完成时,合约不会记录借贷的资金,也就是说用户在借贷资金转出时继续回调借贷方法不会被合约记录,通过对合约调用分析,合约转账逻辑如下:
从上图可看出,借贷转账时,会先调用superTransfer方法,之后调用callAfterTransfer方法,callAfterTransfer方法中通过调用contractFallback方法进行逻辑处理,并且这里的to地址攻击者可控,所以可以进行回调继续进行借贷。
对于攻击者来说,只要本次借贷资金大于自己的质押资金,则本次攻击可成功获利,当可以利用回调获取借贷时,攻击者几乎将合约中池子的资金均进行借贷,获取多种代币资金。
至此此次攻击事件合约漏洞分析结束,攻击者主要利用Gnosis链上PermittableToken合约可实现回调函数,在进行质押存款后,多次实现回调函数进行借贷,获取超过了质押存款的资金,获利离场。
0x5 总结
-
建议Gnosis创建新的桥接代币合约来实现基本的ERC20。
-
建议Agave官方严格检查调用Token风险性。
?扫描关注零时科技服务号?
?区块链安全威胁情报实时掌握?
出品 | 零时科技安全团队
·END·
关注
往期内容回顾
区块链安全100问 | 第四篇:保护数字钱包安全,防止资产被盗
区块链安全100问 | 第五篇:黑客通过这些方法盗取数字资产,看看你是否中招?
零时科技 | 被盗6.1亿美金,Poly Network 被攻击复盘分析
原文始发于微信公众号(零时科技):零时科技 | Agave Finance攻击事件分析