SlowMist:TreasureDAO 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"攻撃トランザクション分析
攻撃トランザクション分析
ここでは 1 つの攻撃トランザクションの詳細のみを示します。他の攻撃トランザクションの手法も同様であるため、ここでは繰り返しません。
攻撃トランザクション:
https://arbiscan.io/tx/0x82a5ff772c186fb3f62bf9a8461aeadd8ea0904025c3330a4d247822ff34bc02
アタッカー:
0x4642d9d9a434134cb005222ea1422e1820508d7b
攻撃の詳細:

以下の図からわかるように、攻撃者は TreasureMarketplaceBuyer コントラクトの buyItem 関数を呼び出し、受信する _quantity パラメーターを 0 にします。
要約する
要約する
この脆弱性の核心は、ERC-721規格のNFTを転送する前に、受信した_quantityパラメータが0ではないという判断が欠如しており、これによりERC-721規格のNFTが転送できるという事実につながります。価格計算時に直接NFTを購入した場合、必要な費用は0として計算されます。このような脆弱性への対応として、SlowMistセキュリティチームは、ERC-721規格のNFTを転送する前に、そのような問題が再発しないように、入荷数量を適切に判断する必要があると推奨しています。


