前言
北京时间2022年03月03日,知道创宇区块链安全实验室监测到Arbitrum上TreasureDAO的NFT交易市场出现多次异常交易,黑客通过漏洞免费获取交易市场中部分NFT。知道创宇区块链安全实验室将对本次事件深入跟踪并进行分析。
事件分析
基础信息
攻击交易哈希:0x57dc8e6a28efa28ac4a3ef50105b73f45d56615d4a6c142463b6372741db2a2b
稳定币保证金DOGE期货未平仓合约飙升至近60亿个DOGE,创下历史最高纪录:金色财经报道,在本周早些时候 Twitter 决定用 Doge 图片替换其蓝鸟标志后,Dogecoin 期货创下纪录,Coinanlyze 的数据显示,截至周二晚上,稳定币保证金狗狗币 (DOGE) 期货合约的未平仓合约 (OI) 飙升至近 60 亿个 DOGE 代币,创下历史最高纪录。截至周三,这代表价值 6 亿美元的狗狗币未结算期货头寸。
稳定币保证金合约的上一个峰值是 2021 年 11 月的 50 亿个 DOGE 代币,当时价值超过 10 亿美元。稳定币保证金合约以USDT等代币结算。[2023/4/6 13:47:21]
TreasureMarketplace:0x2E3b85F85628301a0Bce300Dee3A6B04195A15Ee
游戏NFT市场Fractal扩展到Polygon并获得战略融资:金色财经报道, Twitch 联合创始人 Justin Kan 开发的游戏相关非同质代币 (NFT)平台 Fractal 宣布扩展到Polygon区块链协议。Fractal 的产品套件 F Studio 将在 Polygon 上提供,包括其NFT启动板、市场、锦标赛、开发人员 SDK、游戏启动器和使用 Fractal 服务登录。Polygon 的功能已在三款游戏中上线并可用,未来几个月还会有更多。
Polygon 也将对 Fractal 进行战略投资,深化合作伙伴关系,让团队更好地为 Web3 游戏开发者和玩家服务。Kan 表示,该公司的目标是 AAAA 级区块链游戏,他说:“Fractal 的使命是不懈地为 Web3 游戏开发者提供构建游戏未来所需的一切支持。从用户获取到区块链工具再到金融基础设施,我们制定了框架,以便他们能够专注于成功的游戏开发。”[2023/1/25 11:29:04]
TreasureMarketplaceBuyer:0x812cdA2181ed7c45a35a691E0C85E231D218E273
CZ:USDC取款量有所增长,需要等待银行开门才会恢复:金色财经报道,币安首席执行官CZ在社交媒体发文称,在 USDC 上,币安看到取款量有所增加。但是,从 PAX/BUSD 转换为 USDC 的通道需要通过纽约的银行以美元计价,银行要再过几个小时才开门,预计当银行开门时情况会恢复。相关兑换交易是 1:1 转换,不涉及保证金或杠杆。未来币安也会尝试建立更流畅的兑换渠道。同时,随时提现任何其他稳定币,BUSD,USDT等。[2022/12/13 21:41:45]
攻击流程
攻击者调用TreasureMarketplaceBuyer合约的buyItem函数进行购买NFT的操作,但是我们从InputData中可以看出攻击者传入的_quantity参数为0。虽然传入的购买NFT数量为0,但是攻击者依然成功的获得了一枚编号为的NFT,且TokensTranferred中并未进行代币转移。
数据:5,057枚BTC从Bybit转移到未知钱包:金色财经报道,Whale Alert监测数据显示,北京时间11月10日13时43分,5,057枚BTC (价值约83,945,220美元) 从Bybit转移到未知钱包。[2022/11/10 12:43:16]
攻击核心
根据上述分析,问题核心可能出现在TreasureMarketplaceBuyer合约的buyItem函数。跟进分析后发现,用户调用该函数后合约首先计算出用户购买此NFT的价格,根据购买数量计算出总的价格并将所需支付的代币转入合约;然后调用TreasureMarketplace的buyItem将用户需要购买的NFT从Marketplace购买到TreasureMarketplaceBuyer最后将NFT发送到用户账户。观察合约43-46行发现对ERC-721标准的NFT转移并未对其进行数量判断,若此时的_quantity为0,用户依然会收到NFT。
跟进TreasureMarketplace的buyItem函数发现,合约从市场回购NFT时只需完成listedItem.quantity>=_quantity的限制条件后便开始转移NFT到TreasureMarketplaceBuyer合约,若此时的_quantity为0,依然会转移NFT到TreasureMarketplaceBuyer中。
根据上述分析后发现,当攻击者调用TreasureMarketplaceBuyer合约的buyItem函数进行购买NFT时,若参数_quantity值为0,由于合约并没有对NFT转移数量的判断,且计算价格totalPrice=_pricePerItem*_quantity结果为0,最后导致攻击者能够免费获取该交易市场中ERC-721标准的NFT。
总结
这次攻击产生的主要原因是项目方对NFT转移数量并未做足够的判断,且并未考虑到购买数量为0的恶意购买行为。知道创宇区块链安全实验室在此提醒,任何有关代币转移的操作都需要慎重考虑,合约审计、风控措施、应急计划等都有必要切实落实。
参考链接:
knownseclab.com
knownseclab.com/hacked-archive
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。