NFT:慢雾:XCarnival NFT借贷协议漏洞分析

原文作者:九九,慢雾安全团队

2022年6月27日,据慢雾区消息,XCarnival项目被曝出严重漏洞遭黑客攻击并盗走3,087个ETH。XCarnival是一个ETH链上的NFT借贷项目,目前项目团队正在修复漏洞并承诺会对受影响的用户提供解决方案。慢雾安全团队第一时间介入分析,并将结果分享如下:

相关信息

核心合约地址

P2Controller:

0x34ca24ddcdaf00105a3bf10ba5aae67953178b85

XNFT:

0x39360AC1239a0b98Cb8076d4135d0F72B7fd9909

xToken:

0x5417da20aC8157Dd5c07230Cfc2b226fDCFc5663

攻击者EOA地址

慢雾:过去一周Web3生态因安全事件损失约2400万美元:6月19日消息,据慢雾发推称,过去一周Web3生态系统因安全事件损失约2400万美元,包括Atlantis Loans、Ben Armstrong、TrustTheTrident、FPG、Sturdy、Pawnfi、Move VM、Hashflow、DEP/USDT与LEV/USDC、Midas Capital,总计23,795,800美元。[2023/6/19 21:46:18]

0xb7cbb4d43f1e08327a90b32a8417688c9d0b800a

攻击合约地址

0xf70F691D30ce23786cfb3a1522CFD76D159AcA8d

0x234e4B5FeC50646D1D4868331F29368fa9286238

0x7B5A2F7cd1cc4eEf1a75d473e1210509C55265d8

慢雾:近期出现假冒UniSat的钓鱼网站,请勿交互:5月13日消息,慢雾首席信息安全官 @IM_23pds 在社交媒体上发文表示,近期有假冒比特币铭文钱包及交易市场平台 UniSat 的钓鱼网站出现,经慢雾分析,假网站有明显的传统针对 ETH、NFT 钓鱼团伙的作案特征,或因近期 BRC-20 领域火热故转而制作有关该领域的钓鱼网站,请用户注意风险,谨慎辨别。[2023/5/13 15:01:11]

0xc45876C90530cF0EE936c93FDc8991534F8A6962

漏洞核心点分析

1.攻击者通过XNFT合约中的pledgeAndBorrow函数来进行抵押NFT并借出xToken。

慢雾:靓号黑客已获取到ParaSwap Deployer和QANplatform Deployer私钥权限:10月11日消息,据慢雾区情报,靓号黑客地址之一(0xf358..7036)已经获取到ParaSwap Deployer和QANplatform Deployer私钥权限。黑客从ParaSwap Deployer地址获取到约1千美元,并在QANplatform Deployer地址做了转入转出测试。慢雾MistTrack对0xf358..7036分析后发现,黑客同样盗取了The SolaVerse Deployer及其他多个靓号的资金。截止目前,黑客已经接收到超过17万美元的资金,资金没有进一步转移,地址痕迹有Uniswap V3、Curve、TraderJoe,PancakeSwap、OpenSea和Matcha。慢雾MistTrack将持续监控黑客地址并分析相关痕迹。[2022/10/11 10:31:05]

在pledgeInternal函数中转入NFT并生成订单:

慢雾:跨链互操作协议Poly Network遭受攻击并非由于网传的keeper私钥泄漏:对于跨链互操作协议Poly Network遭受攻击事件,慢雾安全团队分析指出:本次攻击主要在于EthCrossChainData合约的keeper可由EthCrossChainManager合约进行修改,而EthCrossChainManager合约的verifyHeaderAndExecuteTx函数又可以通过_executeCrossChainTx函数执行用户传入的数据。因此攻击者通过此函数传入精心构造的数据修改了EthCrossChainData合约的keeper为攻击者指定的地址,并非网传的是由于keeper私钥泄漏导致这一事件的发生。[2021/8/11 1:47:48]

动态 | 慢雾:Electrum“更新钓鱼”盗币攻击补充预警:Electrum 是全球知名的比特币轻钱包,支持多签,历史悠久,具有非常广泛的用户群体,许多用户喜欢用 Electrum 做比特币甚至 USDT(Omni) 的冷钱包或多签钱包。基于这种使用场景,Electrum 在用户电脑上使用频率会比较低。Electrum 当前最新版本是 3.3.8,而已知的 3.3.4 之前的版本都存在“消息缺陷”,这个缺陷允许攻击者通过恶意的 ElectrumX 服务器发送“更新提示”。这个“更新提示”对于用户来说非常具有迷惑性,如果按提示下载所谓的新版本 Electrum,就可能中招。据用户反馈,因为这种攻击,被盗的比特币在四位数以上。本次捕获的盗币攻击不是盗取私钥(一般来说 Electrum 的私钥都是双因素加密存储的),而是在用户发起转账时,替换了转账目标地址。在此我们提醒用户,转账时,需要特别注意目标地址是否被替换,这是近期非常流行的盗币方式。并建议用户使用 Ledger 等硬件钱包,如果搭配 Electrum,虽然私钥不会有什么安全问题,但同样需要警惕目标地址被替换的情况。[2020/1/19]

2.接着调用withdrawNFT函数提取出质押的NFT,其中首先判断该订单是否被清算状态,如果不是则判断该订单的状态是否为NFT还未被提取且借款金额为0,如果通过即可提取抵押的NFT。

3.以上为攻击前生成订单的准备操作,接着攻击者开始利用生成的订单直接调用xToken合约中的borrow函数进行借款。

在borrowInternal函数中,会外部调用controller合约中的borrowAllowed函数来判断是否可以借款。

可以看到在borrowAllowed函数会调用orderAllowed函数进行订单相关信息的判断,但是在这两个函数中均没有进行_order.isWithdraw状态的判断。因此攻击者可以利用之前生成的订单来调用XToken的borrow函数来借款,而因为抵押的NFT在之前已经被提出,故攻击者可以不用还款来实现获利。

攻击交易分析

此处仅展示其中一笔攻击交易的细节,其余攻击交易的手法均一致,不再赘述。

攻击前准备——生成订单的交易:

0x61a6a8936afab47a3f2750e1ea40ac63430a01dd4f53a933e1c25e737dd32b2f

1.首先攻击者将NFT转入攻击合约并进行授权,接着调用xNFT合约中的pledgeAndBorrow函数在进行抵押NFT生成订单并借款的操作,此处需要注意一点是该函数可以控制传入的xToken,攻击者传入了自己构造的xToken合约地址,并且让借款数量为0,目的是为了满足后续能成功提出NFT时的不被清算且负债为0的条件。

2.攻击者紧接着调用withdrawNFT函数来进行提取抵押的NFT:

正式攻击交易:

0x51cbfd46f21afb44da4fa971f220bd28a14530e1d5da5009cfbdfee012e57e35

攻击者调用xToken合约的borrow函数,传入之前生成的订单的orderID,重复了该操作22次,而因为NFT在准备阶段已经提走,估计无需还款以此来获利。

总结

本次漏洞的核心在于借款的时候,没有进行订单中NFT是否被提走的状态的判断,导致攻击者可以在把NFT提走之后再利用之前生成的订单来借款而无需还款,以此来获利。针对此类漏洞,慢雾安全团队建议在进行借款操作时应做好订单状态中是否已经提走抵押品的判断,避免再次出现此类问题。

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

金星链

[0:15ms0-1:139ms