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

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

相关信息

合约地址

TreasureMarketplaceBuyer:

0x812cda2181ed7c45a35a691e0c85e231d218e273

TreasureMarketplace:

0x2e3b85f85628301a0bce300dee3a6b04195a15ee

Scam Sniffer:攻击者正在测试Blur批量挂单漏洞,请用户当心“零元购”钓鱼风险:3月9日消息,反网络钓鱼解决方案Scam Sniffer发文提醒称,其链上监控机器人在大约5小时前发现一笔可疑Blur交易,有攻击者正在测试Blur批量挂单的漏洞。在这笔交易中,攻击者自己尝试了“网络钓鱼”,并成功将6枚NFT实现了转移。

此前报道,慢雾生态安全合作伙伴Scam Sniffer演示了一个针对Blur NFT市场批量挂单签名的“零元购”钓鱼攻击测试,通过一个“Root签名”即可以极低成本(特指“零元购”)钓走目标用户在Blur平台授权的所有NFT,Blur平台的这个“Root签名”格式类似“盲签”,用户无法识别这种签名的影响。[2023/3/9 12:51:56]

漏洞细节分析

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

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

比特币协会:我们对Bitcoin SV网络的非法攻击表示“零容忍”:官方消息,比特币协会近日发布声明表示:我们对Bitcoin SV网络的非法攻击表示“零容忍”。Bitcoin SV基础架构团队长期以来一直对网络进行定期监控,近期协会发现BSV网络上出现了非法攻击。目前他们已经收集并记录了自此次非法攻击以来的全部相关数据,将提供给相关部门处理。[2021/7/9 0:39:26]

ZBG第四场“零门槛”FIL6Z申购活动已于8月5日11时开启:据ZBG官方消息,ZBG第四场“零门槛”FIL6Z打折申购已于8月5日11:00开启。本场申购将免除持仓ZT限制。申购额度10,000枚,申购价仅15USDT。约为市场价的7.5折。

据悉,五场申购活动结束后,本周内将会开放FIL6Z充提币并上线交易对,成功申购的FIL6Z可在ZB、ZBG流通。详情请咨询ZBG官网。[2020/8/5]

2.在TreasureMarketplace?合约中:

可以发现若传入的_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:15ms0-1:451ms