查看原文
其他

NFT 借贷平台需警惕,XCarnival被攻击事件给我们哪些启示?

成都链安安全团队 成都链安 2022-06-28


2022年6月24日,成都链安链必应-区块链安全态势感知平台舆情监测显示,NFT 借贷协议 XCarnival 遭到攻击,黑客获利 3087 枚以太坊(约 380 万美元)。XCarnival官方发推称,目前智能合约已暂停,暂时不支持存款和借款操作,团队将尽快确认具体情况。成都链安安全团队第一时间对事件进行了分析,结果如下。





 

#攻击过程


攻击交易

0x60a3143c1c7a40d650e9e319d99425da5a87604f474279765f4ffbc0c4c375c2(其中一笔创建攻击质押记录)


0x51cbfd46f21afb44da4fa971f220bd28a14530e1d5da5009cfbdfee012e57e35(其中一笔盗取资金的攻击交易)


攻击者地址

0xb7cbb4d43f1e08327a90b32a8417688c9d0b800a


攻击合约(利用多个合约进行转移NFT)

0xc45876C90530cF0EE936c93FDc8991534F8A6962

0xA04EC2366641a2286782D104C448f13bF36B2304

0x234e4B5FeC50646D1D4868331F29368fa9286238

0x7B5A2F7cd1cc4eEf1a75d473e1210509C55265d8

0xf70F691D30ce23786cfb3a1522CFD76D159AcA8d

被攻击合约

0xb38707e31c813f832ef71c70731ed80b45b85b2d (Xtoken)

0xb14b3b9682990ccc16f52eb04146c3ceab01169a (XNFT)


我们选择一条典型的攻击交易进行展开分析


1. 攻击者先通过Tornado.cash提取资金120ETH作为攻击准备。



2. 购买BAYCNFT,利用攻击合约(0xf70F...cA8d)进行批量创建抵押记录

 

 

在抵押时,并没有限制Xtoken地址,导致地址可被攻击者控制,因此在IXToken(xToken)(0xA04E...2304).borrow调用时,攻击者传入了自己事先部署的攻击地址(如果是在正常合约中,质押之后记录后同时会调用borrow函数借出资金),但是此处攻击者的Xtoken中故意没有借出资金,导致记录的同时没有借出钱,因此可以马上提取质押的NFT。

 



3. 有了抵押记录后但是没有借出资金,所以可以通过withdarw NFT取出被抵押的NFT,但是这里的NFT被取出后并没有更新Xtoken的质押记录,只是更改了NFT是否被取出的标识。

 


4. 由于前面的步骤中抵押的NFT被取出但是对应的质押记录仍然存在,因此攻击者创建多个攻击合约,再将反复转移该NFT进行2-3中的步骤,创建多个异常的质押记录。


 

5. 利用步骤4中创建的多个质押记录借贷出大量资金,因为借出时Borrow验证并没有验证NFT被取出的状态,只是验证了订单ID。

 



 

 

#漏洞分析


本次攻击主要利用了NFT抵押时合约中未检查攻击者传入的xToken地址是否为项目方白名单中的地址,并且在借贷时,并未对抵押记录的状态进行检测的漏洞,导致攻击者反复使用无效的抵押记录进行借贷。



#资金追踪

攻击发生后,被盗资金约3087ETH转移2967ETH至(0xCA67...3586),120ETH转入tornado.cash。


不过就在刚刚,XCarnival攻击者已经返还1467枚ETH给项目方,因为上午XCarnival官方表示在攻击者退还盗取资金的前提下将给予攻击者1500枚ETH的赏金,并明确免除对此人的法律诉讼。



#总结

针对本次事件,成都链安安全团队建议:


Xtoken的地址应该设置为白名单进行限制并验证。项目在抵押借贷的业务当中应该针对抵押品的状态进行多次验证以防止状态验证未判断导致资金被盗,同时NFT借贷平台需要引起安全重视。此外建议项目上线前选择专业的安全审计公司进行全面的安全审计,规避安全风险。






您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存