
慢雾: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 提走之后再利用之前生成的订单来借款而无需还款,以此来获利。针对此类漏洞,慢雾安全团队建议在进行借款操作时应做好订单状态中是否已经提走抵押品的判断,避免再次出现此类问题。
比推快讯
更多 >>- 白宫:特朗普希望和平解决伊朗问题,但也不惧怕使用武力
- 白宫:特朗普将在两周内决定是否对伊朗采取军事行动
- 全网比特币合约未平仓头寸达 693.9 亿美元
- 某鲸鱼于 6 小时前从 Deribit 提出 303.36 枚 BTC,约 3166 万美元
- 以色列预计美国将在 24 至 48 小时内就打击伊朗作出决定
- Arkham:贝莱德在 6 月份已经购买超 7.5 亿美元 ETH
- KyberSwap 将于 7 月 1 日起在聚合器中下线 ZKsync Era
- 消息人士:特朗普尚未就打击伊朗作出最终决定
- Plasma 计划于夏末启动主网
- Wormhole NTT 框架拓展至 Sui 网络,Momentum 已支持 NTT
- Telegram 创始人立下遗嘱,将 171 亿美元财富分配给 6 个孩子和 100 个精子捐赠所生子女
- 特朗普签署行政命令,将 TikTok 关闭期限延长 90 天
- 瑙鲁将成立虚拟资产管理局,力争成为太平洋地区的加密货币中心
- Coinbase:超 4000 万枚 SOL 被质押至 Coinbase 验证节点
- 数据:已有超 100 家公司合计持有逾 83 万枚 BTC
- 天桥资本创始人:SOL 将超越 ETH
- Pantera Capital 与 Blockworks 推出代币透明度框架
- 韩国金融服务委员会正在制定推出虚拟资产 ETF 路线图
- Visa 宣布旗下稳定币业务已扩展到中欧、东欧、中东和非洲地区
- 某 LayerZero 团队/投资者将 200 万枚 ZRO 存入 Binance,约 361.5 万美元
- 美国财长贝森特:GENIUS 法案通过将让稳定币市场前景将更加光明
- 哈梅内伊最新表态:美国已介入中东地区事务,暴露以色列“软弱无能”
- 特朗普:美联储主席鲍威尔应将利率下调 250 个基点
- 币安 Alpha 积分更新:slisBNB 和 clisBNB 将计入用户的币安 Alpha 持仓积分
- 欧股短线跳水,德国 DAX 指数、意大利富时 MIB 指数跌超 1%
- 上市公司的比特币财库储备已超 768,500 枚,价值超 820 亿美元
- Fireblocks 报告:全球 49%机构已使用稳定币进行支付
- 苹果、谷歌等服务的 160 亿条登录凭证遭泄露,或对加密货币持有者造成影响
- Telegram 创始人 Pavel Durov 被批准 7 月 10 日起可离开法国
- Virtuals:注意到通过开发者钱包异常累积积分情况,将对流程全面审查
- 特朗普:《华尔街日报》根本不知道我对于伊朗问题的想法是什么
- 加密风投 Hypersphere 投资合伙人在虚假 Zoom 会议中损失“多年积蓄”
- Kraken 与 Babylon 集成推出比特币质押服务
- Hypersphere 合伙人:遭遇 Zoom 钓鱼攻击,6 个钱包资金被窃
- BitoPro 报告:攻击系 Lazarus Group 所为,通过 AWS 劫持进行脚本植入
- Project Eleven 完成 600 万美元融资,Variant Fund 和 Quantonation 领投
- 日本服装连锁企业 Mac House 拟购入约 1177 万美元的比特币等加密资产
- 特朗普旗下公司悄然减持加密项目 WLFI 股份
- Presto Research:企业加密资产储备存在泡沫风险,但较以往“更微妙”
- 消息人士:在与美国的谈判中,欧盟越来越屈从于 10%的基础关税
- 马斯克将把 X 打造成"超级应用":探索引入信用卡或借记卡
- Alchemy Pay:将推出自有稳定币
- X CEO:用户很快就能在 X 平台上进行投资或交易
- 小摩:不要对美联储降息抱太大期望
- Greeks.live:BTC 交易者关注 10.5 万美元筹码集中区域,预期 7 月波动较大
- XRP Ledger 将推出首个社区主导组织 XAO DAO,迈向去中心化治理
- 香港胜利证券拟推出结构性加密产品
- 分析:美联储降息希望转向 9 月,比特币保持平稳
- 伊朗对加密交易所实施宵禁措施,以防止资本外流
- 澳大利亚 Monochrome 现货比特币 ETF 的 BTC 持仓突破 800 枚