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

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

相关信息

合约地址

TreasureMarketplaceBuyer:

0x812cda2181ed7c45a35a691e0c85e231d218e273

慢雾:警惕针对 Blur NFT 市场的批量挂单签名“零元购”钓鱼风险:金色财经报道,近期,慢雾生态安全合作伙伴 Scam Sniffer 演示了一个针对 Blur NFT 市场批量挂单签名的“零元购”钓鱼攻击测试,通过一个如图这样的“Root 签名”即可以极低成本(特指“零元购”)钓走目标用户在 Blur 平台授权的所有 NFT,Blur 平台的这个“Root 签名”格式类似“盲签”,用户无法识别这种签名的影响。慢雾安全团队验证了该攻击的可行性及危害性。特此提醒 Blur 平台的所有用户警惕,当发现来非 Blur 官方域名(blur.io)的“Root 签名”,一定要拒绝,避免潜在的资产损失。[2023/3/7 12:46:39]

TreasureMarketplace:

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]

0x2e3b85f85628301a0bce300dee3a6b04195a15ee

火币BETH昨日质押量增速达10% BETH/ETH价格几乎“零价差”:据火币全球站数据,截至12月24日15:30,火币BETH价格为570USDT,BETH/ETH交易对价格为0.9958(1BETH=0.9958ETH)。火币BETH24小时交易量超过2648个BETH,折合约150万USDT。

分析人士认为,ETH与BETH是1:1的单向不可逆兑换,因此理论上BETH价格长期低于ETH约1-20%。而火币BETH/ETH交易对价格为0.9958,仅相差0.5%,说明火币在BETH的交易量、价格等均有优势。[2020/12/24 16:23:23]

漏洞细节分析

稳定币初创公司Liquity计划实施“零治理”:金色财经报道,即将启动的稳定币初创公司Liquity计划实施“零治理”。最值得注意的是,Liquity的智能合约将根据需要进行调整(不需要由代币持有者组成的治理委员会)。Liquity将没有治理代币,但仍计划使用流动性挖掘来促进早期采用。其提供了一个“增长代币”(GT),持有者将持续通过Liquity费用获得少量收益。最近的电话会议尚未解决有关Liquity将通过GT奖励哪些行为的问题。[2020/8/26]

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

2. 在 TreasureMarketplace?合约中:

可以发现若传入的 _quantity 参数为 0,则可以直接通过 require(listedItem.quantity >= _quantity, "not enough quantity"); 检查并进入下面的转移 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:31ms0-1:399ms