慢雾: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 提走之后再利用之前生成的订单来借款而无需还款,以此来获利。针对此类漏洞,慢雾安全团队建议在进行借款操作时应做好订单状态中是否已经提走抵押品的判断,避免再次出现此类问题。
比推快讯
更多 >>- SpaceX 首次星舰回收成功
- Gate Ventures、Movement Labs 与 Boon Ventures 合作推出2000万美元加密基金
- 何一:本人只有一个 X 账号
- 马斯克赢得第二起针对 OpenAI 诉讼的可能性渺茫
- 2024 年全球最适合加密货币业务的国家地区排名出炉,迪拜位列第一
- 南非税务局将加密货币纳入合规计划,正向相关服务提供商与 FSCA 寻求用户信息
- 摩根大通 CEO:全球紧张局势加剧,对经济前景持谨慎态度
- 币安:对尼日利亚法院拒绝保释 Tigran Gambaryan 的决定深感失望
- 将头像更换为“Starship Flight 5”
- Neiro CTO 回应质疑:选择 Gotbit 为做市商系急于上市之下的权宜之策,愿为此判断失误担责
- Beercoin 和 WaterCoin 在 Gotbit 被起诉后称早已更换做市商,但遭社区质疑
- 专家:OpenAI 或已超出非营利结构限制,面临昂贵重组
- Vitalik:12 个月前讨论的是 L1 从 L2“提取租金”,现在情况正相反
- 特朗普家族加密项目 WLFI 将于 10 月 14 日直播介绍公售详情
- 英国男子因在垃圾填埋场丢失比特币,起诉英国纽波特市议会 6.47 亿美元赔偿
- Murad:本周期 Meme 币的表现将超越一切
- 监狱记录显示前 FTX 高管 Ryan Salame 已开始七年半的服刑
- 哈里斯公布个人体检报告,欲推动公众审视特朗普的健康状况
- 网络安全公司:Python 软件包索引中发现能窃取加密货币的恶意软件
- 律所 Pomerantz 对交易所 Coinbase Global 提起集体诉讼
- 山东法院民法典适用典型案例:目前对数字藏品的发行、交易并未有法律明令禁止
- 链上风投平台 Fission Labs 完成 160 万美元种子轮融资,SALT Fund 和 Kraynos Capital 领投
- 前 FTX 高管 Ryan Salame 入狱前在 LinkedIn 宣布其新职位为囚犯,并新增“清理和削木”技能
- 花旗银行现金代币服务已投入商业使用
- Arbitrum 社区成员质疑“游戏催化计划”进展,发起提案要求返还 2.2 亿枚 ARB 至 DAO 国库
- 穆长春:数字人民币价值模式下可在区块链上提供智能支付,未来将在智能合约等领域深化发展
- 涉嫌参与1.8亿美元加密货币诈骗的嫌疑人在篡改脚踝监控器后逃亡
- 美 SEC 将对现货以太坊 ETF 期权的决定推迟至12月
- 美国参议员Bill Hagerty提出改进版的支付稳定币法案
- 加密货币交易所 Fairdesk 因监管问题将于 11 月 30 日关闭所有服务
- 美股收盘:三大股指全体上涨,特斯拉跌8.78%
- BTC突破63000美元
- 特朗普家族 DeFi 项目 World Liberty Financial 将于10 月 15 日开始公开代币销售
- 前 FTX Digital Markets 联席CEO Ryan Salame 或即将入狱
- 拜登表示已授权特朗普关于人身安全问题的一切需求
- Arkham CEO证实其公司将迁至多米尼加共和国
- Airdrop Farmer批评 Scroll 的空投分配比例
- Fox记者:Ripple联创Chris Larsen向支持哈里斯的PAC捐赠 100 万美元的 XRP
- QCP Capital 分析师:比特币若能维持在6万美元上方,“Uptober”仍有希望
- 某巨鲸近20分钟内从币安提取价值101万美元的PEPE和148万美元的SHIB
- 灰度公布未来可能纳入 Grayscale 投资产品的代币列表,包含KAS、APT、ARB等
- 某巨鲸卖出7月建仓的1600万枚PEOPLE,亏损25万美元
- Coinbase 分析师:Mt. Gox 还款期限推迟短期内或缓解BTC抛压担忧
- 比特币向上触及62000美元,日内涨2.82%
- Paradigm向其分拆公司Ithaca投资2000万美元,旨在开发 Layer 2 区块链 Odyssey
- Karate Combat将于 2025 年Q1在 Hedera 上推出L2链“UP”
- 模块化 DPoS 网络Elixir新推文暗示或已进行空投快照
- Mango Network V2.0 白皮书发布,同时支持EVM和MoveEVM
- 币安高管 Tigran Gambaryan 再次被尼日利亚法院拒绝保释
- 密歇根大学调查:美国消费者信心走软
比推专栏
更多 >>观点
项目
比推热门文章
- SpaceX 首次星舰回收成功
- Gate Ventures、Movement Labs 与 Boon Ventures 合作推出2000万美元加密基金
- 何一:本人只有一个 X 账号
- 马斯克赢得第二起针对 OpenAI 诉讼的可能性渺茫
- 2024 年全球最适合加密货币业务的国家地区排名出炉,迪拜位列第一
- 南非税务局将加密货币纳入合规计划,正向相关服务提供商与 FSCA 寻求用户信息
- 摩根大通 CEO:全球紧张局势加剧,对经济前景持谨慎态度
- 币安:对尼日利亚法院拒绝保释 Tigran Gambaryan 的决定深感失望
- 将头像更换为“Starship Flight 5”
- BTC跑赢美股,微策略跑赢BTC