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

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

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

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

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

JuggyLAND (JGN)正式上线狮子NFT交易:官方消息,1月15日JGN游戏JuggyLAND正式上线狮子NFT交易,用户可以自由去出售或者购买最强壮的狮子NFT,开启游戏战备贮蓄。JuggyLAND当前已完成盲盒抢购并上线繁殖、交易等功能,战斗系统也即将上线。

JuggyLAND是一款 Metaverse 游戏,采用全新的战斗系统,让玩家通过收集、战斗和繁殖(幼狮)来赚取JGN。JGN是一个具有DeFi 基础设施的 Metaverse NFT 2.0 项目。旗下JGNnft是专注于BSC社区的NFT+DEFI交易所。[2022/1/15 8:50:59]

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

韩国信用卡公司ShinhanCard推出NFT服务:1月4日消息,韩国信用卡公司ShinhanCard周二表示,已经推出一项NFT服务,客户可以使用数字资产存储照片。

Shinhan Card一位官员表示,用户只需在其智能手机应用程序点击一下按钮,就可以自动生成一个NFT。但他补充说,客户不能交易其生成的NFT,为实现这一目标,ShinhanCard正在与当地制造商和经销商一起扩大NFT网络。(Koreaherald)[2022/1/4 8:24:10]

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

NFT市场OpenSea交易者数量突破100万:金色财经报道,据最新数据显示,NFT市场OpenSea交易者数量已经突破100万,创下历史新高,本文撰写时为1,064,198。[2021/11/18 22:00:21]

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

NFT 概念板块今日平均涨幅为1.53%:金色财经行情显示,NFT 概念板块今日平均涨幅为1.53%。26个币种中17个上涨,9个下跌,其中领涨币种为:UGAS(+13.11%)、WAX(+10.26%)、DEGO(+10.19%)。领跌币种为:RARI(-8.42%)、LAR(-6.18%)、ATTN(-4.25%)。[2021/10/3 17:22:11]

首先,总控将BAYC转给某个马仔。马仔然后调用xNFT中的pledgeAndBorrow()函数,抵押品为BAYC,但什么也没贷。本步骤生成了一个orderID(43)。

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

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

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

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

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

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

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金智博客

[0:0ms0-5:739ms