
慢雾: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 提走之后再利用之前生成的订单来借款而无需还款,以此来获利。针对此类漏洞,慢雾安全团队建议在进行借款操作时应做好订单状态中是否已经提走抵押品的判断,避免再次出现此类问题。
比推快讯
更多 >>- 某新地址向 HyperLiquid 存入 500 万 U 开设 3 倍 XPL 空单仓位
- 上周数字资产产品流入 33 亿美元,资产管理规模升至 2390 亿美元
- 数据:7 亿美元 USDT 从 Aave 平台提取并转入 HTX 交易所
- Kraken 已上线 XION
- 黄金年内飙升幅度创 1979 年以来最大
- 马斯克购入逾 250 万股特斯拉股票
- Ethena:Based 收入一周内增长 4 倍,目前已占 Hyperliquid 24 小时合约交易量约 20%
- Hyperscale Data 推出 1 亿美元比特币资金战略
- QCP:BTC ETF 连续五日大额流入,山寨币市值创 90 天新高
- 分析师:鲍威尔采取何种基调和指引是市场的疑虑
- 美国参议院周一晚投票表决米兰美联储理事提名,能否参加本周 FOMC 会议目前仍不确定
- 罗斯柴尔德分析师,美国股市估值过高,建议保持谨慎
- 高盛策略师:2026 年美股将再度加速
- 分析师:美联储决议日的期权波动为数周来最大
- 币安:Boundless (ZKC) 第一阶段空投门槛为 206 分
- 高盛:预计 9 月 FOMC 声明不会暗示 10 月降息
- 6 万枚比特币案主犯钱志敏计划于 9 月 29 日在伦敦审判,国内受害者或需自行维权
- 分析师:比特币 8 月现货交易量较 1 月几近减半,市场进入HODL 模式
- 钱志敏百亿比特币洗钱案将于 2025 年 9 月 29 日在伦敦开庭
- 过去 1 小时全网爆仓 1.18 亿美元,主爆多单
- CryptoQuant:矿工减少抛售行为提振比特币反弹信心
- 韩国交易员南石熙将山寨多单减至 19 个,MYX 多单平仓亏损 35 万美元
- pump.fun 于 Solana 生态发币平台的市场份额升至 90.6%
- 数据:过去 1 小时 Binance 净流入 3,169.51 万 USDT
- 香港会财局:或将间接参与监管稳定币,预计 1-3 年内出台全面审计与会计指引
- 部分山寨币下跌,HIFI 跌幅近 50%
- 数据:逾 3100 万枚 AVNT 转入币安
- 山寨币普跌,HIFI24 小时跌超 47%
- 英伟达美股盘前直线下挫,跌幅扩大至 2.15%
- 数据:公司和机构实体持有超过 100 万枚 BTC,73 个实体的 ETH 财库共持有 491 万枚 ETH
- 美国得州教师退休基金披露通过 MSTR 持有 2500 万美元的比特币敞口
- Binance Alpha 将支持 APX 代币置换为 ASTER
- 机构:金价持稳于高位,美联储利率决议前市场保持观望
- 美元指数短线走低至 97.54,欧元和英镑持续上扬
- 数据:随着 BTC 稳定在 11.4 万美元上方,市场对 ETF 的需求有所回升
- 过去 7 日 pump.fun 的 PUMP 代币购买量合计约 26 亿枚,回购占比 0.26%
- 某新建钱包从 Kraken 提取 21,925 枚 ETH,价值 1.0224 亿美元
- 0xa523 地址开头巨鲸减仓 BTC 空单 200 枚,目前其距离清算价格仅差 0.69%
- 伦敦证交所推出面向私募基金的区块链平台
- 麻吉黄立成再次加仓 3.75 亿枚 PUMP 多单,总持仓升至 1.31 亿美元
- Starknet 启动 BTC 质押集成升级
- Matrixport:美联储或将启动降息,宽松预期有望推动牛市延续
- Vitalik 警告加密项目不要在治理流程中使用人工智能
- 机构:美联储降息幅度非关键,劳动力市场脆弱平衡才是核心
- Arthur Hayes:2025 年比特币价格或将攀升至 20 万美元,2028 年目标 100 万美元
- Zyra:核心模块已完成,主网进入 DevNet 测试阶段
- 法国上市公司 Capital B 增持 48 枚 BTC,总持仓量达 2249 枚
- Deribit 官方宣布已上线 BTC 和 ETH 的 U 本位期权
- 美 SEC 主席废除激进的执法议程,承诺对公司采取执法行动前会发出违规通知
- 观点:数字人民币与稳定币互补大于对立,但在用户心智与支付入口上存在竞争
比推专栏
更多 >>观点
比推热门文章
- 某新地址向 HyperLiquid 存入 500 万 U 开设 3 倍 XPL 空单仓位
- 上周数字资产产品流入 33 亿美元,资产管理规模升至 2390 亿美元
- 数据:7 亿美元 USDT 从 Aave 平台提取并转入 HTX 交易所
- Kraken 已上线 XION
- 黄金年内飙升幅度创 1979 年以来最大
- 马斯克购入逾 250 万股特斯拉股票
- Ethena:Based 收入一周内增长 4 倍,目前已占 Hyperliquid 24 小时合约交易量约 20%
- Hyperscale Data 推出 1 亿美元比特币资金战略
- QCP:BTC ETF 连续五日大额流入,山寨币市值创 90 天新高
- 分析师:鲍威尔采取何种基调和指引是市场的疑虑