创宇区块链|Rari Capital 遭受重入攻击,损失超 8000 万美元!

知道创宇区块链安全实验室
企业专栏
热度: 15816

以太坊上 feiprotocol 和 RariCapital 协议中的多个池子遭到重入攻击,导致超 8000 万美元损失!

前言

北京时间 2022 年 4 月 30 日,知道创宇区块链安全实验室监测到以太坊上 feiprotocol 和 RariCapital 协议中的多个池子遭到重入攻击,导致损失超 8000 万美元。

知道创宇区块链安全实验室第一时间跟踪本次事件并分析。


漏洞

基础信息

众所周知,compound 项目的代码本就存在一些安全问题,而 feiprotocol 和RariCapital协议延用了compound 的代码库,同时在 doTransferOut() 方法的实现中使用了存在重入的写法,导致了事件的发生。

因此次事件中的多次攻击方式相同,本文仅对一次攻击进行分析。

攻击者地址:0x6162759edad730152f0df8115c698a42e666157f

攻击合约:0x32075bad9050d4767018084f0cb87b3182d36c45

tx:0xadbe5cf9269a001d50990d0c29075b402bcc3a0b0f3258821881621b787b35c6

CEtherDelegator合约:0xfbD8Aaf46Ab3C2732FA930e5B343cd67cEA5054C


漏洞分析

漏洞关键在于 CEtherDelegator 合约中的 doTransferOut 方法使用了 call 方法进行代币转移,而在使用时并未对其进行gas限制,导致能够被利用实现重入攻击;



漏洞

其次,合约在对用户进行借贷放款时,并未实行检查-生效-交互的模式,更新抵押资产价值在放款之后,使得攻击者能够在借款之后进行函数回调;


漏洞

最为关键的一点是,攻击者在借款后调用了exitMarket()函数退出借款的市场,之后对抵押品进行赎回,由于此时攻击者已退出市场,因而协议不会计算这笔借款,所以能够成功赎回抵押品。


漏洞

攻击流程

1、攻击者使用闪电贷贷款并抵押到协议中;

2、攻击者借出ETH,随后触发重入;

3、调用 exitMarket() 函数退出借款的市场,并取出抵押品;

4、归还闪电贷;

5、成功赖账套利,免费借出 ETH;

6、最后,攻击者重复攻击手法对协议中的池子进行攻击,成功套利约 8000 万美元。

总结

本次攻击事件核心是协议引用了存在重入漏洞的 compound 代码库,导致合约发生重入攻击。

建议项目方在编写项目时,应始终使用检查-生效-交互的模式,并在合约中应用重入锁,在发送以太币时一定要限制 gas 或者使用 thransfer(),一定不要使用存在安全问题的项目代码。

在此提醒项目方发布项目后一定要将私钥严密保管,谨防网络钓鱼,另外,近期,各类合约漏洞安全事件频发,合约审计、风控措施、应急计划等都有必要切实落实。


声明:本文为入驻“MarsBit 专栏”作者作品,不代表MarsBit官方立场。
转载请联系网页底部:内容合作栏目,邮件进行授权。授权后转载时请注明出处、作者和本文链接。未经许可擅自转载本站文章,将追究相关法律责任,侵权必究。
提示:投资有风险,入市须谨慎,本资讯不作为投资理财建议。
免责声明:本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况,及遵守所在国家和地区的相关法律法规。