区块见闻 区块见闻
Ctrl+D收藏区块见闻
首页 > ADA > 正文

独家 | Fairyproof Tech:代币合约不匹配 Cream Finance遭二次攻击

作者:

时间:

Cream Finance是DeFi领域的知名去中心化借贷协议。项目方在业内首先推出了白名单机制的Ion Bank借贷机制。这一创新一方面为DeFi借贷提供了更为便捷的工具,另一方面也为黑客攻击创造了条件。

在今年2月13日,Cream Finance就因为其Ion Bank被黑客利用并辅以闪电贷工具遭到攻击。时隔半年,在8月30日,Cream Finance再次遭到闪电贷攻击。

本次攻击是因为项目中的APM代币合约与借贷合约的cToken合约不适配造成重入漏洞,被黑客利用。

在本次攻击中,攻击者的地址为:0xce1f4b4f17224ec6df16eeb1e3e5321c54ff6ede。

攻击合约的地址为:0x38c40427efbAAe566407e4CdE2A91947dF0bD22B。

被攻击的合约有两个,合约及地址分别为:

APM token合约:0xff20817765cb7f73d4bde2e66e067e58d11095c2

cToken合约:0xd06527d5e56a3495252a528c4987003b712860ee

我们先看cToken合约中出现漏洞的代码片段:

BNB Chain:BNB智能链开始恢复运行:金色财经报道,BNB Chain发推称,BNB智能链(BSC)20多分钟前开始良好运行。验证者正在确认他们的状态,社区基础设施也在升级。

此外,BscScan数据显示,BNB Chain网络已恢复出块。[2022/10/7 18:41:47]

上面的代码所实现的逻辑是在转账完成之后,才修改借贷额度状态accountBorrows。

这是一个典型的竞态问题。

代码中的doTransferOut函数最终会调用标的代币(underling token)合约的transfer函数,在此之后再对与标的代币关联的cToken合约的状态进行修改。

通常cToken对应的标的代币合约都是标准的ERC-20代币合约,这类标准的ERC-20代币合约中的transfer函数中没有回调函数。但如果标的代币不是标准的ERC-20代币合约,其transfer函数带有回调函数,则会引发重入漏洞。

本次攻击恰恰就是因为cToken对应的标的代币(APM代币)不是标准的ERC-20代币。APM代币合约是个基于ERC-777标准的合约。这个合约中的transfer函数最后会调用_callPostTransferHooks()函数,在这个函数的最后会有一个回调函数IAmpTokensRecipient.tokensReceived。

比特币全网未确认交易数量为4412笔:金色财经报道,BTC.com数据显示,目前比特币全网未确认交易数量为4412笔,全网算力为191.9EH/s,24小时交易速率为2.61交易/秒,目前全网难度为24.37T,预测下次难度上调5.03%至25.6T,距离调整还剩4天8小时。[2022/1/17 8:53:20]

下面是与此相关的代码片段:

在回调函数中,攻击者可以再次发起交易,而此时cToken还未修改用户借款的相关状态,攻击者却已经收到借款,可以利用这些借款进行后续的动作。

合约中与cToken修改借款状态的相关接口已经定义了防重入的锁 borrowInternal,使用户无法再次直接从初始的借款合约中借入资金。

borrowInternal的代码片段如下:

攻击者也注意到了这一点,于是选择从一个借贷池借来的cToken,去另一个借贷池借款,以绕开上述防重入锁的限制。

由于cToken被再次用于借款,因此超过了借款额度。如果攻击者直接还款则会因为超额借贷而导致第一次借贷交易失败。因此攻击者选择不还款,而是使用另一个地址清算了这个满足清算条件的cToken,从而完成全部攻击。

纵观整个攻击过程,导致本次攻击成功的原因有两个:

1 为AMP代币添加借贷池时,没有考虑到AMP代币与借贷合约的适配性

2 借贷生成的cToken存在竞态条件问题,代码的实现逻辑没有严格遵循状态修改要放在外部调用之前的默认规范。

在此,Fairyproof Tech提醒所有的项目方:编写Solidity合约代码时一定要遵循Solidity合约编写的安全规范,不能心存侥幸。

在此例中Cream.Finance的代码分叉复制于Compound,尽管后者已经经过考验,但依然不能认为其代码是万无一失的。

根据我们的经验,即便是利用一些成熟的、历经考验的项目代码,也不能认为它们是绝对安全的,依然要进行充分的审计。尤其是要弄清楚,这些代码适用的前提条件和安全假设,以及具体到自己的应用场景中,这些代码是否还满足这些前提和假设。

在Fairyproof Tech审计代码的过程中,对适用前提和安全假设都有严格的检验标准和审查流程,并不会因为项目代码分叉自知名项目而忽略对这些安全事项的检查。

关于Fairyproof Tech:

Fairyproof Tech科技有限公司是一家专注区块链生态安全的公司。Fairyproof Tech科技主要通过“代码风险检测+逻辑风险检测“的一体化综合方案服务了诸多新兴知名项目。公司成立于2021年01月,团队由一支拥有丰富智能合约编程经验及网络安全经验的团队创建。

团队成员参与发起并提交了以太坊领域的多项标准草案,包括ERC-1646、ERC-2569、ERC-2794,其中ERC-2569 被以太坊团队正式收入。

团队参与了多项以太坊项目的发起及构建,包括区块链平台、DAO组织、链上数据存储、去中心化交易所等项目, 并参与了多个项目的安全审计工作,在此基础上基于团队丰富的经验构建了完善的漏洞追踪及安全防范系统。

作者:

Fairyproof TechCEO 谭粤飞

美国弗吉尼亚理工大学(Virginia Tech, Blacksburg, VA, USA) 工业工程(Industrial Engineering) 硕士(Master)。曾任美国硅谷半导体公司 AIBT Inc(San Jose, CA, USA) 软件工程师,负责底层控制系统的开发、设备制程的程序实现、算法的设计,并负责与台积电的全面技术对接和交流。自2011至今,从事嵌入式,互联网及区块链技术的研究,深圳大学创业学院《区块链概论》课程教师,中山大学区块链与智能中心客座研究员,广东省金融创新研究会常务理事 。个人拥有4项区块链相关专利、3本出版著作。

标签:ETHNFTTOKETOKENBAETHNFTP币Hoo Tokenredcommunitytoken

ADA热门资讯
经济日报:非同质化代币为何升温

NFT(Non-Fungible Token,非同质化代币)再次涌起热潮,近日,NBA明星球员史蒂芬·库里花费约116万元人民币买下一个NFT猿猴头像,引起海内外网友热议。热度不仅在国外,今年以来,随着NFT市场不断升温,我国越来越多企业也相继拥抱这一新事物,将音乐、绘画、游戏皮肤等制作成NFT出售,受到消费者追捧,NFT也由此走入大众视野。

一线与新一线:去中心化衍生品交易所没有护城河

一线:TOP2 众所周知,去中心化衍生品赛道的TOP1有两个,dYdX和Perpetual在用户量及交易量上难分伯仲。 1.dYdX dYdX在2017年就成立了,是全球首个去中心化衍生品交易所,投资背景非常豪华,有a16z、Coinbase等机构的深度且长期地参与。

NFT巨鲸出没 谁的赚钱能力最强?

巨鲸,一直是Crypto领域最神秘的力量,他们凭借庞大的资金量以及对行业的超前认知赚取收益,甚至影响市场走向。 在CEX市场,我们看到6月份的一只巨鲸在 Bitfinex 上借了超 2.5 万枚比特币,给市场造成巨大恐慌。在DeFi市场,我们见到了SBF这样的巨鲸通过挖提卖对某些项目代币造成重大影响。

金色观察|聊聊NFT价值捕获的真和假

狂躁的市场又在NFT上延伸起来。从NFT协议,到NFT应用,从交易NFT到超量发售NFT,再到在游戏里使用NFT,再扩大到一个宏大的主题:元宇宙,再扩大到一个具备投机情绪的、靠近“终极模式”的形态产品Gamefi。 NFT的发展之路快速“成熟”了起来,当强烈觉得这是泡沫的时候,却感觉NFT越来越火,开始怀疑“理智的判断”,感觉被打脸,开始被情绪所带动。

Loot的孪生兄弟More Loot的领取教程

4日凌晨Loot创始人dom发了个推特,宣布130万个Mloot可免费领取。 Loot是什么?想必大部分人都已经知道了,最近NFT圈内大火的文字图片就是出自它的手笔。限量8000张的Loot在Opensea的地板价一度高达2位数的eth,加上免费的空投AGLD也可兑换到2位数的eth也让持有人开心了一把。

DeFi深入探索:一文读懂Aave的前世今生

Aave 是一个去中心化的借贷系统,允许用户在不需要中间人的情况下借入、借出和赚取加密资产的利息。Aave 在以太坊区块链上运行,并使用智能合约系统,使平台上的资产能够由运行其软件的分布式计算机网络管理。因此,他们的用户不必信任某个机构或个人来处理他们的资金。 AAVE 允许用户创建贷款池,使他们能够借出或借入20个不同的加密货币。