“零元購” —— TreasureDAO NFT 交易市場漏洞分析

By:九九@慢霧安全團隊

2022 年03 月03 日,據慢霧區消息,TreasureDAO 的NFT 交易市場被曝出嚴重漏洞,TreasureDAO 是一個基於Arbitrum(L2)上的NFT 項目。目前項目團隊正在修復漏洞並承諾會對受影響的用戶提供解決方案。慢霧安全團隊第一時間介入分析,並將結果分享如下:

相關信息

合約地址

TreasureMarketplaceBuyer:

0x812cda2181ed7c45a35a691e0c85e231d218e273

TreasureMarketplace:

0x2e3b85f85628301a0bce300dee3a6b04195a15ee

漏洞細節分析

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 轉移前,需對傳入的數量做好判斷,避免再次出現此類問題。

聲明:本內容為作者獨立觀點,不代表0x财经 立場,且不構成投資建議,請謹慎對待,如需報導或加入交流群,請聯繫微信:VOICE-V。

來源:慢霧科技原創

Total
0
Shares
Related Posts