“零元购” TreasureDAO NFT 交易市场漏洞分析_NFT:treasurechaintst

2022年03月03日,据慢雾区消息,TreasureDAO的NFT交易市场被曝出严重漏洞,TreasureDAO是一个基于Arbitrum上的NFT项目。目前项目团队正在修复漏洞并承诺会对受影响的用户提供解决方案。慢雾安全团队第一时间介入分析,并将结果分享如下:

相关信息

合约地址

TreasureMarketplaceBuyer:

0x812cda2181ed7c45a35a691e0c85e231d218e273

TreasureMarketplace:

0x2e3b85f85628301a0bce300dee3a6b04195a15ee

成都市利用区块链技术实现不动产首次登记“零材料”受理:12月6日消息,成都市规划和自然资源局积极探索围绕数据安全管理、业务智能审批、行为监测预警、数据协同共享等应用场景,建成“蓉e链”区块链平台,实现不动产首次登记“零材料”受理。将规划和自然资源部门内部产生的土地出让合同、划拨决定书、建设用地规划许可证、建设工程规划许可证、土地核实意见书、权籍调查结果和外部产生的成都市建设工程并联竣工验收通知书等不动产首次登记申请材料,通过不动产单元代码关联并全量实时上“蓉e链”共享存证,确保业务环节前后衔接、数据真实准确,便利信息共享查询追溯。(中国日报网)[2021/12/6 12:54:13]

漏洞细节分析

1.用户通过TreasureMarketplaceBuyer合约中的buyItem函数去购买NFT,该函数会先计算总共需要购买的价格并把支付所需的代币打入合约中,接着调用TreasureMarketplace合约中的buyItem从市场购买NFT到?TreasureMarketplaceBuyer?合约,接着在从TreasureMarketplaceBuyer合约中把NFT转给用户。

Ripple CEO:XRP具有“零通胀动态”:金色财经报道,最近在接受CNBC采访时,Ripple首席执行官Brad Garlinghouse声称,XRP具有“零通胀动态”。他说,Ripple拥有很多,但XRPL的共识算法阻止了更多代币的创建。Garlinghouse称,这与PoW加密货币不同,例如比特币和以太坊等仍在被挖掘。当被问及美国证券交易委员会对Ripple提起的诉讼时,Garlinghouse重申了Ripple的辩护,即XRP并非投资合同,因为代币的持有者无法拥有该公司的股份。此外,Garlinghouse继续坚持Rippe并不控制XRP。[2021/5/27 22:47:52]

Gate.io研究院发布“零知识证明于区块链中的落地应用”报告:Gate.io研究院于今日发布“零知识证明于区块链中的落地应用”报告。报告指出,在区块链技术加快发展的背景下,多种应用场景应运而生,随之而来的是用户在隐私安全方面的更高需求。当前,众多区块链开发团队提出了多种不同的用户隐私安全保护机制。

其中,零知识证明与区块链技术相结合作为一种新方案为提高区块链隐私安全性提供了更多可能。该报告结合“零知识证明”的采纳项目、区块链系统“Zcash”的相关情况,对“Zcash”加密技术以及零知识证明进行了深入探讨。 详情点击原文链接。[2020/6/28]

2.在TreasureMarketplace?合约中:

掌柜调查署丨兰建忠:火币合约实现“零分摊”关键在于“2+1”投资者保护基金:在今日的掌柜调查署上,火币集团副总裁兰建忠发言指出:火币合约实现全品种“零分摊”关键在于“2+1”的投资者保护基金先行赔付机制。

首先是安全备付金:火币合约和Huobi Global共用安全备付金。该保护基金总额20,000 BTC,专项用于应对火币平台可能出现的极端突发安全事故。

第二是风险准备金:风险准备金是用于应付因强平单未能平出而产生的穿仓损失。每一个合约品种,都有一个风险准备金。

第三是 零分摊保证金:零分摊保证金则是火币合约自2018年12月上线以来,就开启的一笔200万美元的“零分摊”保障资金。[2020/3/10]

可以发现若传入的_quantity参数为0,则可以直接通过require(listedItem.quantity>=_quantity,"notenoughquantity");检查并进入下面的转移NFT流程,而其中没有再次对ERC-721标准的NFT转移进行数量判断,使得虽然传入的_quantity参数虽然为0,但仍然可以转移ERC-721标准的NFT。而计算购买NFT的价格的计算公式为totalPrice=_pricePerItem*_quantity,因此购买NFT的价格被计算为0,导致了在市场上的所有ERC-721标准的NFT均可被免费购买。

攻击交易分析

此处仅展示一个攻击交易的细节,其余攻击交易的手法都一致,不再赘述。

攻击交易:

https://arbiscan.io/tx/0x82a5ff772c186fb3f62bf9a8461aeadd8ea0904025c3330a4d247822ff34bc02

攻击者:

0x4642d9d9a434134cb005222ea1422e1820508d7b

攻击细节:

可以从下图中看到,攻击者调用了TreasureMarketplaceBuyer合约中的buyItem函数,并使传入的_quantity参数为0。

可以看到代币转移均为0,攻击者并没有付出任何成本就成功购买了tokenID为3557的NFT,整个攻击流程与上面的漏洞细节分析中所讲的一致。

总结

本次漏洞的核心在于进行ERC-721标准的NFT转移前,缺少了对于传入的_quantity参数不为0的判断,导致了ERC-721标准的NFT可以直接被转移且计算价格时购买NFT所需费用被计算成0。针对此类漏洞,慢雾安全团队建议在进行ERC-721标准的NFT转移前,需对传入的数量做好判断,避免再次出现此类问题。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

水星链

[0:0ms0-1:572ms