百枚NFT被盗,损失高达140万美元,究竟发生了什么?

近年来,NFT一路高歌猛进,隐隐在加密市场占据领头羊的地位。随着加密艺术品、游戏、数字证书等领域NFT概念爆发,一时间NFT 的价值不可估量,也正因如此,很多黑客和偷窃者也盯上了这块市场,各种手段齐出,盗窃事件层出不穷。

据比特安区块链安全情报平台监控的消息显示,基于 Arbitrum 的TreasureDAO NFT 交易市场被曝发现漏洞,超过百枚NFT Token被盗,价值约140万美元,比特安全团队及时对此安全事件进行分析。

 

攻击信息

比特安全团队通过追踪分析,主要攻击信息如下:

攻击者钱包地址

https://arbiscan.io/address/0x9b1acd4336ebf7656f49224d14a892566fd48e68

攻击者交易

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

出现漏洞的官方合约地址

TreasureMarketplaceBuyer

https://arbiscan.io/address/0x812cda2181ed7c45a35a691e0c85e231d218e273#code

TreasureMarketplace

攻击分析

攻击者调用 TreasureMarketplaceBuyer 合约的 buyItem 函数进行购买NFT的操作,但是我们从 InputData 中可以看出攻击者传入的 _quantity 参数为0。虽然传入的购买 NFT 数量为 0,但是攻击者依然成功的获得了一枚编号为 [5490] 的 NFT,且 Tokens Tranferred 中并未进行代币转移。

 

所以不难看出,问题核心可能出现在TreasureMarketplaceBuyer 合约的 buyItem 函数。我们跟进分析后发现,当攻击者调用 TreasureMarketplaceBuyer 合约的 buyItem 函数进行购买NFT时,若参数_quantity值为 0,由于合约并没有对NFT转移数量的判断,且计算价格 totalPrice = _pricePerItem * _quantity 结果为 0 ,最后导致攻击者能够免费获取该交易市场中ERC-721标准的NFT。

总结

本次事件的根本原因是ERC-1155代币和ERC-721代币混用导致的逻辑混乱,并且项目方也未考虑到购买数量为0的恶意购买行为。

万幸的是攻击者成功零资金购买NFT成功后,又逐步归还。针对此次事件,比特安安全团队希望大家吸取经验,凡事都要严密谨慎、严格细致,及时推进安全审计,做好安全防控工作。

猜你喜欢

转载自blog.csdn.net/lmk714899/article/details/123429932
今日推荐