慢雾:XCarnival NFT借贷协议漏洞分析
原文作者:九九,慢雾安全团队
2022 年 6 月 27 日,据慢雾区消息,XCarnival 项目被曝出严重漏洞遭黑客攻击并盗走 3,087 个 ETH(约 380 万美元)。XCarnival 是一个 ETH 链上的 NFT 借贷项目,目前项目团队正在修复漏洞并承诺会对受影响的用户提供解决方案。慢雾安全团队第一时间介入分析,并将结果分享如下:
相关信息
核心合约地址
P2Controller:
0x34ca24ddcdaf00105a3bf10ba5aae67953178b85
XNFT:
0x39360AC1239a0b98Cb8076d4135d0F72B7fd9909
xToken:
0x5417da20aC8157Dd5c07230Cfc2b226fDCFc5663
攻击者 EOA 地址
0xb7cbb4d43f1e08327a90b32a8417688c9d0b800a
攻击合约地址
0xf70F691D30ce23786cfb3a1522CFD76D159AcA8d
0x234e4B5FeC50646D1D4868331F29368fa9286238
0x7B5A2F7cd1cc4eEf1a75d473e1210509C55265d8
0xc45876C90530cF0EE936c93FDc8991534F8A6962
漏洞核心点分析
1.攻击者通过 XNFT 合约中的 pledgeAndBorrow 函数来进行抵押 NFT 并借出 xToken。
在 pledgeInternal 函数中转入 NFT 并生成订单:
2. 接着调用 withdrawNFT 函数提取出质押的 NFT,其中首先判断该订单是否被清算状态,如果不是则判断该订单的状态是否为 NFT 还未被提取且借款金额为 0(无负债),如果通过即可提取抵押的 NFT。
3. 以上为攻击前生成订单的准备操作,接着攻击者开始利用生成的订单直接调用 xToken 合约中的 borrow 函数进行借款。
在 borrowInternal 函数中,会外部调用 controller 合约中的 borrowAllowed 函数来判断是否可以借款。
可以看到在 borrowAllowed 函数会调用 orderAllowed 函数进行订单相关信息的判断,但是在这两个函数中均没有进行 _order.isWithdraw 状态的判断。因此攻击者可以利用之前生成的订单(订单里的抵押的 NFT 已经被提走)来调用 XToken 的 borrow 函数来借款,而因为抵押的 NFT 在之前已经被提出,故攻击者可以不用还款来实现获利。
攻击交易分析
此处仅展示其中一笔攻击交易的细节,其余攻击交易的手法均一致,不再赘述。
攻击前准备——生成订单的交易:
0x61a6a8936afab47a3f2750e1ea40ac63430a01dd4f53a933e1c25e737dd32b2f
1. 首先攻击者将 NFT 转入攻击合约并进行授权,接着调用 xNFT 合约中的 pledgeAndBorrow 函数在进行抵押 NFT 生成订单并借款的操作,此处需要注意一点是该函数可以控制传入的 xToken,攻击者传入了自己构造的 xToken 合约地址,并且让借款数量为 0,目的是为了满足后续能成功提出 NFT 时的不被清算且负债为 0 的条件。
2. 攻击者紧接着调用 withdrawNFT 函数来进行提取抵押的 NFT:
正式攻击交易:
0x51cbfd46f21afb44da4fa971f220bd28a14530e1d5da5009cfbdfee012e57e35
攻击者调用 xToken 合约的 borrow 函数,传入之前生成的订单的 orderID,重复了该操作 22 次(orderID: 45 – 66),而因为 NFT 在准备阶段已经提走,估计无需还款以此来获利。
总结
本次漏洞的核心在于借款的时候,没有进行订单中 NFT 是否被提走的状态的判断,导致攻击者可以在把 NFT 提走之后再利用之前生成的订单来借款而无需还款,以此来获利。针对此类漏洞,慢雾安全团队建议在进行借款操作时应做好订单状态中是否已经提走抵押品的判断,避免再次出现此类问题。
比推快讯
更多 >>- 美国众议院将于下周对(FIT21)市场结构法案进行投票
- CPI助推降息预期,美股高开
- 灰度向“bc1qxt”开头新地址转入700枚BTC
- 某鲸鱼地址6个月内投资PEPE将500万美元增值至4400万美元
- 互换市场预期美联储2024年降息步伐将加快
- 交易员坚定了对美联储将于9月和12月降息的押注
- 比特币上涨突破64,000美元,日内涨幅4.12%
- 美国4月未季调CPI年率 3.4%,预期3.40%,前值3.50%
- Humanity Protocol以10亿美元估值完成3000万美元新一轮融资
- Bitfarms第一季度总计产出943枚比特币
- Titan Global持有6550万美元贝莱德IBIT,成为第四大持有者
- Raven完成270万美元种子轮融资
- 前FTX高管Ryan Salame请求法庭从宽处理,判处其18个月监禁
- Axelar(AXL)与德意志银行合作,加入Project Guardian计划
- FTX将债权人提交索赔的截止日期延长至7月底或8月初
- 区块链游戏CROSS THE AGES筹集350万美元融资
- Standardhash标准算力完成数百万美元天使轮融资
- 盈透证券为英国客户推出加密货币交易
- OSL集团︰未来香港数字资产产品将有融资融券和期权、期货等衍生工具
- 加密投资公司BlockTower Capital遭受黑客攻击
- 毕马威中国:58%的香港家族辦公室及高淨值人士已作出虚拟资产投资
- Render Network通过集成3D 计算机图形软件工具集Blender的提案投票
- Web3社交应用Gamic完成180万美元融资
- 萨尔瓦多为新机场酒店启动基于比特币的融资
- 资管公司Calamos提交比特币“缓冲型”ETF申请
- Circle计划将其法律基地从爱尔兰共和国转移到美国
- Huobi HK的香港虚拟资产交易平台牌照申请已于5月14日被撤回
- Stretto网络钓鱼攻击影响了Celsius债权人和其他三家破产公司
- Bitrace:普通用户在透过任何工具产生靓号后,都应确保以多重签署的方式使用
- OpenAI联创Ilya Sutskever称将离开公司
- Vanguard拟任命对比特币友好的前贝莱德高管担任CEO
- 美联储Loretta Mester:维持利率不变是适当的,不急于考虑加息
- 业内人士:加密行业对美国大选的影响比以往任何时候都大
- Lens Protocol将通过 ZkSync 推出区块链网络Lens Network
- Liquity推出自定义借款利率的新型稳定币BOLD
- CertiK:某地址疑似因私钥泄露损失约价值430万美元的资产
- Coinbase将Drift Protocol (DRIFT)列入上币路线图
- 谷歌推出AI视频生成模型Veo
- 数据:EIGEN代币申领数量已突破6200万枚,参与申领地址超15万个
- 马斯克旗下人工智能公司xAI与甲骨文接近达成100亿美元服务器租用协议
- 今日美国九只现货比特币ETF净减持351枚BTC,约合2170万美元