加载中 ...
首页 > 股票 > 区块链 > 正文

NFT 借贷平台 XCarnival 被盗3000 ETH 事件分析

2022-06-27 15:49:34 来源:广东财经网

NFT借贷平台@XCarnival_Lab大约7个小时之前被黑了,至少有3000个$ETH (约380万美元)被盗。下面是该事件的简要分析:

该NFT借贷平台的合约有个bug:作为抵押品的NFT在取出后,其orderID仍然可用,可以此申请贷款。

有三个相关合约: xETH, 钱在这里main.https://etherscan.io/address/0xb38707e31c813f832ef71c70731ed80b45b85b2d…… 

 xNFT, NFT管理器. https://etherscan.io/address/0xb14b3b9682990ccc16f52eb04146c3ceab01169…… 

 P2Controller, 很多借贷限制条件的验证者.

黑客 https://etherscan.io/address/0xb7cbb4d43f1e08327a90b32a8417688c9d0b800a… 从Tornado中拿出了干坏事的启动资金. 然后在OpenSea上购买了 #BAYC 5110。

他部署了一个总控合约 0xf706…ca8d https://etherscan.io/address/0xf70f691d30ce23786cfb3a1522cfd76d159aca8d……, 该合约生成了很多用来当女巫用同一个NFT进行借贷的马仔合约,比如0x5338…3714 https://etherscan.io/address/0x53386a82e55202a74c6d83c7eede7a80ba553714…….

首先,总控将BAYC转给某个马仔(以0x5338为例)。马仔然后调用xNFT中的pledgeAndBorrow()函数(抵押并贷款),抵押品为BAYC,但什么也没贷(贷款为一个总控部署的假xToken合约,数量为0)。本步骤生成了一个orderID(43)。

本Tx中可以看到这些过程,不过只有internal transaction。如果想详细解读得自己深挖调用栈。
马仔5338然后取出刚才抵押的NFT,并还给总控。总控再把NFT给别的马仔。如此左手倒右手循环,黑客搞出了几十个orderID,之后可作为借款凭证。而有bug的xNFT并没有在取出抵押物后撤销凭证orderID。

下一步,总控让所有马仔依次从xETH合约里借钱。攻击完成。黑客用空气借走了真金白银(NFT抵押品早就取出了)。这是其中一个tx。

上面的是大概过程。再来看下细节。在xNFT合约中,withdrawNFT()并咩有在取出后消除orderID。当P2controller调用getOrderDetail()时还是能取到这个ID。

NFT 借贷平台 XCarnival 被盗3000 ETH 事件分析

在xETH中,borrow()会调用borrowInternal()然后调用controller.borrowAllowed() 来验证orderID是否有效。

NFT 借贷平台 XCarnival 被盗3000 ETH 事件分析

这个是P2controller的borrowAllowed() 函数。首先会问xNFT.getOrderDetail(),这个肯定过。还有其他各种限制,但没有一个好使,我在代码评论中有分析。 注:黑客之所以要多个马仔合约是因为这里最下面有一个对单个orderID的借贷数量的限制。

NFT 借贷平台 XCarnival 被盗3000 ETH 事件分析

总结:抵押物在取出后还有效,这是一个非常简单粗暴肤浅的合约bug。 下面这张图是这些错综复杂的内部调用的清晰的调用栈。想不借助工具裸眼分析如果看麻了可以参考下图。

NFT 借贷平台 XCarnival 被盗3000 ETH 事件分析

“广东财经网”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与

我们联系删除或处理,客服邮箱1098101642@qq.com,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同

其观点或证实其内容的真实性。

  • 声音提醒
  • 60秒后自动更新
  • 【民政部回应何时恢复婚姻登记】民政部社会事务司二级巡视员杨宗涛表示,婚姻登记场所是人群聚集场所,部分地区暂停婚姻登记工作是对人民群众安全负责。未停止登记的地方推广用电话、网络、qq群预约登记,控制登记人数,分批分段登记,减少人员聚集和在登记机关停留时间。已停止婚姻登记地方将根据当地疫情控制情况逐渐恢复。

    15:54
  • 欧洲央行副行长金多斯:欧洲央行还没有达到逆转利率。宽松政策的副作用更明显了。

    15:54
  • 财经网站Forexlive分析师Justin Low评瑞士1月CPI月率:尽管通胀年率保持稳定,但核心通胀率有所下降,这一点令人更加担忧。这只是进一步巩固了瑞士央行维持现有货币政策不变,并可能在未来寻求更多宽松措施的观点。

    15:54
  • 【武汉两大批发市场商户开业率超过80%】商务部市场建设司司长朱小良10日称,目前武汉生活必需品供应基本正常,除冷鲜肉、鲜叶菜等少数品种存在结构性短缺外,大部分重要生活物资供应充足,未发生明显抢购或脱销断档情况。当地白沙洲和四季美两大批发市场正常营业,商户开业率超过80%,日交易量上升至3000吨以上。(国是直通车)

    15:53
  • 【日本2019年经常项目顺差增长4.4%】日本财务省10日发布的国际收支初步统计报告显示,主要受外国人入境游消费扩大影响,2019年日本经常项目顺差增长4.4%。报告显示,2019年日本经常项目顺差为20.06万亿日元(1美元约合109.8日元)。其中,商品贸易方面,由于液化天然气价格下跌等因素,进口下降5.6%至75.56万亿日元;由于汽车部件及钢铁等产品出口减少,出口下降6.3%至76.12万亿日元。货物贸易顺差减少53.8%,为5536亿日元。(新华社)

    15:53
  • 欧元兑美元EUR/USD短线波动不大,现报1.0952。

    15:53
  • 瑞士1月CPI年率:0.2%,前值:0.2%,预期:0.1%;瑞士1月CPI月率:-0.2%,前值:0%,预期:-0.2%。

    15:52
  • 英镑兑美元GBP/USD短线走低13点,现报1.2890。

    15:52
  • 【宁德时代“供电”国产特斯拉 有望拉低售价20%】全国乘联会秘书长崔东树分析认为,“随着特斯拉国产化率提升和产能爬坡,未来特斯拉国产车型的价格下探空间还是很大的。”他预计今年下半年,国产Model 3车型的售价就有望降至25万元,降幅接近20%。(新京报)

    15:51
  • 【内蒙古:对不裁员或少裁员企业返还上年度50%失业保险费】据内蒙古新型冠状病毒肺炎疫情防控工作指挥部消息,疫情期间,内蒙古对不裁员或少裁员的企业返还上年度实际缴纳失业保险费的50%,对面临暂时性经营困难的中小企业,返还标准提高到上年度6个月企业及其职工缴纳社会保险费的50%。

    15:51
  • 【商务部:2019年服务进出口总额54152.9亿元 同比增长2.8%】商务部新闻发言人表示,2019年,在服务贸易创新发展试点等政策的激励下,我国服务贸易总体保持平稳向上态势,逆差明显下降,结构显著优化,高质量发展成效初步显现。全年服务进出口总额54152.9亿元(人民币,下同),同比增长2.8%。其中,出口总额19564.0亿元,同比增长8.9%;进口总额34588.9亿元,同比减少0.4%。(第一财经)

    15:51
  • 【振华股份:疫情导致下游客户开工推迟 产品库存上升】振华化学公告,公司目前生产经营稳定,所有产能均正常开工,原材料采购能基本满足生产需要,由于疫情导致下游客户开工推迟,公司出货量减少,产品库存有所上升。公司将根据客户需求、疫情及市场变化,适度调整生产经营策略,尽可能保持生产经营的稳定。

    15:50
  • 环旭电子2月10日晚间公告,公司2020年1月合并营业收入为23.27亿元,较去年同期的合并营业收入减少27.83%,较2019年12月合并营业收入环比减少37.23%。

    15:49
  • 精测电子:与京东方集团签订了多份销售合同,合同累计金额达到6.96亿元。

    17:12
  • 华夏银行:银保监会同意本公司在全国银行间债券市场发行不超过100亿元人民币的金融债券,募集资金全部用于绿色信贷。

    17:03