2022年03月03日,据慢雾区消息,TreasureDAO的NFT交易市场被曝出严重漏洞,TreasureDAO是一个基于Arbitrum上的NFT项目。目前项目团队正在修复漏洞并承诺会对受影响的用户提供解决方案。慢雾安全团队第一时间介入分析,并将结果分享如下:
相关信息
合约地址
TreasureMarketplaceBuyer:
0x812cda2181ed7c45a35a691e0c85e231d218e273
TreasureMarketplace:
火币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]
0x2e3b85f85628301a0bce300dee3a6b04195a15ee
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]
漏洞细节分析
1.用户通过TreasureMarketplaceBuyer合约中的buyItem函数去购买NFT,该函数会先计算总共需要购买的价格并把支付所需的代币打入合约中,接着调用TreasureMarketplace合约中的buyItem从市场购买NFT到?TreasureMarketplaceBuyer?合约,接着在从TreasureMarketplaceBuyer合约中把NFT转给用户。
微比特矿池将推出“零费率”BTC挖矿:据官方消息,微比特(ViaBTC)矿池于2020年7月1日-10月31日推出为期4个月的“零费率”BTC挖矿,凡≥300p的微比特中国用户,只均可参与。据悉,再结合使用微比特矿池推出的“智能挖矿”产品,能够有效避免币价波动造成的收益风险。[2020/7/1]
2.在TreasureMarketplace?合约中:
湖州电力物资供应签约结算通过区块链技术实现“零”跑办:4月27日,湖州飞剑杆塔制造有限公司业务代表沈利平收到国网湖州供电公司发来的电子合同签署任务短信提醒——“请登陆‘电e签’平台,审核并签署‘2020年度铁附件框架协议’,签订有效期为3个工作日”。沈利平随即登录“电e签”统一签署平台,从收件箱中找到相应合同并复核无误后,点击“签署”键,原本需要至少半天时间的合同签署工作只花了短短5分钟就完成了。如此高效的签约工作得益于国网湖州供电公司对基于区块链技术的电子合同签署平台的成功应用。[2020/5/1]
可以发现若传入的_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转移前,需对传入的数量做好判断,避免再次出现此类问题。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。