
慢雾: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 提走之后再利用之前生成的订单来借款而无需还款,以此来获利。针对此类漏洞,慢雾安全团队建议在进行借款操作时应做好订单状态中是否已经提走抵押品的判断,避免再次出现此类问题。
比推快讯
更多 >>- 过去 24 小时全网爆仓超 5 亿美元,主爆多单
- Tom Lee:加密财库公司泡沫或已破裂
- 沃勒:2% 通胀目标有助于美联储保持政策问责
- 美联储理事沃勒:不认为有必要将货币政策降至中性水平以下
- Chainlink 在 MegaETH 上线首个原生实时预言机
- 分析师:黄金走势取决于降息前景及贸易局势
- Whale Alert:某地址持有的 10,301,346 枚 USDT 被冻结
- 美联储沃勒:美国政府停摆令后续政策路径更不确定
- 嘉楠科技重新符合纳斯达克最低股价的上市要求
- 昨日 1.4 亿做空 BTC 巨鲸的比特币多单加仓至 3475 万美元,整体仓位达 8390 万美元
- 美股开盘,纳指涨 0.41%
- 港股上市公司国际商业结算拟购买不超过 2 亿港元的比特币
- 美股上市公司 DFDV 增持 86,307 枚 SOL,总持仓升至 2,195,926 枚
- a16z 对 Solana 生态质押协议 Jito 投资 5000 万美元
- 美联储理事米兰:25 个基点的降息导致利率调整速度慢于实际需求
- Temple Digital Group 完成 500 万美元种子轮融资,Paper Ventures 领投
- 美联储理事沃勒:如果 GDP 保持韧性,预计降息的步伐将放缓
- YZi Labs 宣布投资 Temple Digital Group
- MoonPay 推出统一加密支付平台 MoonPay Commerce
- Figment 收购 Rated Labs,以增强面向机构客户的质押数据服务
- 美联储理事巴尔呼吁加强对稳定币监管的护栏措施
- 上市公司目前共持有约 104 万枚 BTC,创历史新高
- 代币化黄金板块市值升至 32.8 亿美元续创新高,24H 涨幅 2.1%
- Telcoin 筹集 2,500 万美元启动受监管数字资产银行
- ZOOZ 斥资 1000 万美元增持约 88 枚 BTC,比特币总持仓量升至 942 枚
- IOBC Capital 管理合伙人:加密投资正在迎来美元基金的投资时代
- 现货黄金续刷历史新高至 4250 美元/盎司
- 德银调查显示多数金融业人士担忧美联储独立性削弱
- FSB 警告加密监管不一致性可能引发连锁失效风险
- 去中心化能源网络 Daylight 完成总计 7500 万美元融资,a16z Crypto 等参投
- 慢雾余弦:一个签名点击可将用户钱包私钥权限转移不是好机制
- 美国零售销售数据推迟公布
- Dolenc:欧洲央行未来举措可能为加息或降息
- 贝莱德将于本周四推出符合《GENIUS 法案》要求的货币市场基金
- 以太坊财库公司 ShapeeLink 达成证券购买协议募资 7650 万美元
- SharpLink:已筹集 7650 万美元用于增持 ETH
- 分析:2020 年失踪的 12 万枚比特币因 “伪随机私钥” 被盗
- 美联储巴尔金,美国企业招聘和裁员均未发生变化
- Voyage 完成 300 万美元融资,a16z 与 Solana Ventures 等机构参与
- Tether 今日宣布向 OpenSats 捐赠 25 万美元
- Pump.fun 已累计回购价值超 1.4 亿美元 PUMP 代币
- 美联储理事沃勒:今年年底美国 GDP 可能走弱
- 加密基金 C1 Fund 宣布已购买 Chainalysis 股权
- 数据:矿工一周内向币安存入 5.1 万枚比特币,行为明显转向抛售
- 山寨币季节指数跌至 29
- 沃勒:金融市场是最大谜题,民众面临高利率压力
- 美联储理事沃勒:已成功完成美联储主席职位的面试
- Caliber 斥资 200 万美元增持 LINK 代币,总持有量达 562,535 枚
- 慢雾余弦:绝大多数加密用户无需担心遭遇弱随机私钥或助记词被破解风险
- CME Group Q3 2025 加密衍生品交易量达 9010 亿美元,创历史新高