CreamFinance是DeFi领域的知名去中心化借贷协议。项目方在业内首先推出了白名单机制的IonBank借贷机制。这一创新一方面为DeFi借贷提供了更为便捷的工具,另一方面也为黑客攻击创造了条件。
在今年2月13日,CreamFinance就因为其IonBank被黑客利用并辅以闪电贷工具遭到攻击。时隔半年,在8月30日,CreamFinance再次遭到闪电贷攻击。
本次攻击是因为项目中的APM代币合约与借贷合约的cToken合约不适配造成重入漏洞,被黑客利用。
在本次攻击中,攻击者的地址为:0xce1f4b4f17224ec6df16eeb1e3e5321c54ff6ede。
攻击合约的地址为:0x38c40427efbAAe566407e4CdE2A91947dF0bD22B。
独家 | Maker总锁仓量超过8亿美元?:据DappBirds DeFi Data专题数据显示,Maker总锁仓量超过8亿美元,DeFi中锁定资产总价值达43.06亿美元,较昨日上涨2.40%,其中Maker,Compound,Aave,Synthetix,Curve分别以8.14亿美元,5.84亿美元,5.58亿美元,4.78亿美元,3.35亿美元位列前五名[2020/7/25]
被攻击的合约有两个,合约及地址分别为:
APMtoken合约:0xff20817765cb7f73d4bde2e66e067e58d11095c2
cToken合约:0xd06527d5e56a3495252a528c4987003b712860ee
我们先看cToken合约中出现漏洞的代码片段:
独家 | Bakkt期货合约数据一览:金色财经报道,Bakkt Volume Bot数据显示,7月13日,Bakkt比特币月度期货合约日交易额为1509万美元,同比下降16%,未平仓合约量为708万美元,同比下降4%。[2020/7/14]
上面的代码所实现的逻辑是在转账完成之后,才修改借贷额度状态accountBorrows。
这是一个典型的竞态问题。
代码中的doTransferOut函数最终会调用标的代币合约的transfer函数,在此之后再对与标的代币关联的cToken合约的状态进行修改。
独家 | 金色财经2月23日矿币数据播报:金色财经报道,据币印矿池数据显示:
主流币挖矿日收益分别为:BTC(¥1.13/T)、ZEC(¥0.46/T)、LTC(¥21.99/G)、BSV(¥1.14/T)、BCH(¥1.17/T)、DASH(¥0.13/G)。
当前热门矿机数据及净收益分别为:神马M20S(BTC,¥47.09)、蚂蚁Z11(ZEC,¥48.81)、芯动A4+(LTC,¥6.79)。[2020/2/23]
通常cToken对应的标的代币合约都是标准的ERC-20代币合约,这类标准的ERC-20代币合约中的transfer函数中没有回调函数。但如果标的代币不是标准的ERC-20代币合约,其transfer函数带有回调函数,则会引发重入漏洞。
本次攻击恰恰就是因为cToken对应的标的代币不是标准的ERC-20代币。APM代币合约是个基于ERC-777标准的合约。这个合约中的transfer函数最后会调用_callPostTransferHooks()函数,在这个函数的最后会有一个回调函数IAmpTokensRecipient.tokensReceived。
独家 | 梓岑:比特币突破前高会在减半后:金色财经报道,在今日的“金色财经xOKEx矿池丨如何抓住矿币减半行情”直播中,面对Okex矿池负责人Alina提问“你认为这次减半行情目前已经到什么阶段了?将会持续多久?”时,RenrenBit CMO梓岑表示至少矿业已经提前反应,一方面是对减半行情的乐观预期,另一方面是希望抢在减半前尽可能多挖比特币, 算力竞赛越来越激烈。减半带来的绝不仅仅是通胀率降低,更多的是持有者开始惜筹,不再卖出。按照上次减半的经历,接下来的剧情应该是一路向上,临近减半一波回调,然后再继续上攻,最后突破前高,最后就是一片星辰大海。场外FOMO不出现,我不下车,我认为突破前高会在减半后。[2020/2/3]
下面是与此相关的代码片段:
独家 | EOS Cannon楷书:有必要限制超级节点:近日,EOS创始人BM发布了宪法修改提案,对超级节点和仲裁权限进行限制。对此EOS Cannon节点创始人楷书在接受金色财经独家采访时表示:\"对超级节点的限制是有必要的,EOS在治理的设计时就有类似美国三权分立的模式在,超级节点、仲裁、执行出块和开发者之间保持一个权力的制衡。目前来看超级节点主要负责对仲裁的执行,对于超级节点来说重点还是要把出块、生态和社区的孵化做好。\"[2018/6/30]
在回调函数中,攻击者可以再次发起交易,而此时cToken还未修改用户借款的相关状态,攻击者却已经收到借款,可以利用这些借款进行后续的动作。
合约中与cToken修改借款状态的相关接口已经定义了防重入的锁?borrowInternal,使用户无法再次直接从初始的借款合约中借入资金。
borrowInternal的代码片段如下:
攻击者也注意到了这一点,于是选择从一个借贷池借来的cToken,去另一个借贷池借款,以绕开上述防重入锁的限制。
由于cToken被再次用于借款,因此超过了借款额度。如果攻击者直接还款则会因为超额借贷而导致第一次借贷交易失败。因此攻击者选择不还款,而是使用另一个地址清算了这个满足清算条件的cToken,从而完成全部攻击。
纵观整个攻击过程,导致本次攻击成功的原因有两个:
1为AMP代币添加借贷池时,没有考虑到AMP代币与借贷合约的适配性
2借贷生成的cToken存在竞态条件问题,代码的实现逻辑没有严格遵循状态修改要放在外部调用之前的默认规范。
在此,灵踪安全提醒所有的项目方:编写Solidity合约代码时一定要遵循Solidity合约编写的安全规范,不能心存侥幸。
在此例中Cream.Finance的代码分叉复制于Compound,尽管后者已经经过考验,但依然不能认为其代码是万无一失的。
根据我们的经验,即便是利用一些成熟的、历经考验的项目代码,也不能认为它们是绝对安全的,依然要进行充分的审计。尤其是要弄清楚,这些代码适用的前提条件和安全假设,以及具体到自己的应用场景中,这些代码是否还满足这些前提和假设。
在灵踪安全审计代码的过程中,对适用前提和安全假设都有严格的检验标准和审查流程,并不会因为项目代码分叉自知名项目而忽略对这些安全事项的检查。
关于灵踪安全:
灵踪安全科技有限公司是一家专注区块链生态安全的公司。灵踪安全科技主要通过“代码风险检测+逻辑风险检测“的一体化综合方案服务了诸多新兴知名项目。公司成立于2021年01月,团队由一支拥有丰富智能合约编程经验及网络安全经验的团队创建。
团队成员参与发起并提交了以太坊领域的多项标准草案,包括ERC-1646、ERC-2569、ERC-2794,其中ERC-2569被以太坊团队正式收入。
团队参与了多项以太坊项目的发起及构建,包括区块链平台、DAO组织、链上数据存储、去中心化交易所等项目,并参与了多个项目的安全审计工作,在此基础上基于团队丰富的经验构建了完善的漏洞追踪及安全防范系统。
作者:
灵踪安全CEO谭粤飞
美国弗吉尼亚理工大学(VirginiaTech,Blacksburg,VA,USA)工业工程硕士(Master)。曾任美国硅谷半导体公司AIBTInc软件工程师,负责底层控制系统的开发、设备制程的程序实现、算法的设计,并负责与台积电的全面技术对接和交流。自2011至今,从事嵌入式,互联网及区块链技术的研究,深圳大学创业学院《区块链概论》课程教师,中山大学区块链与智能中心客座研究员,广东省金融创新研究会常务理事?。个人拥有4项区块链相关专利、3本出版著作。
标签:TOKKENTOKENTOKEMustangTokenTokenStand NetworkGoFit TokenVerify Token
随着NFT市场持续繁荣,新的一周依旧有很多相关的新闻。OpenSea8月份的交易额突破了10亿美元,SuperRare推出了新的功能,投资公司AndreessenHorowitz和Paradigm的股价上涨了一倍,AxieInfini.
1900/1/1 0:00:002020「Defisummer」让人们看到了去中心化金融的魅力和潜力,也让DeFi、CeFi之争一度成为人们热议的话题。DeFi凭借着高收益、免许可、非托管俘获了很多加密用户,更有狂热支持者称「DeFi必定取代CeFi」.
1900/1/1 0:00:00原文标题:《库里花了18万美金买的猴子头像,为什么能火遍推特?》编者语:8月28日,NBA球星斯蒂芬·库里将其推特头像更换为BoredApeYachtClub作品,让Boredape再次掀起热潮,据Opensea数据显示.
1900/1/1 0:00:00根据比特币分布的数据来看,资产负债表上有比特币的公司/机构现在总持有1,660,473枚比特币,几乎占比特币总供应量的8%。其中智能软件服务公司MicroStrategy持有108,991个比特币,占其公司总市值的75%.
1900/1/1 0:00:008月26日消息,美国伊利诺伊州莱克县的财务主管霍莉·金成为该州第一位接受加密竞选捐款的候选人。据《芝加哥论坛报》周三报道,Kim最近收到了TCapitalCoin创始人MarkTan捐赠的3美元Litecoin.
1900/1/1 0:00:00大家好,我是佩佩,之前我们有提到过随着opensea里的JPG—NFT炒作爆发,市场中也有一种声音认为类似的潮流也会转移到其他生态中,就像曾经的defi挖矿一样,目前看来在以太之外的NFT市场.
1900/1/1 0:00:00