ที่อยู่ตามสัญญา
ข้อมูลที่เกี่ยวข้อง
ที่อยู่ตามสัญญา
TreasureMarketplaceBuyer:
0x812cda2181ed7c45a35a691e0c85e231d218e273
TreasureMarketplace:
0x2e3b85f85628301a0bce300dee3a6b04195a15ee
การวิเคราะห์รายละเอียดช่องโหว่
1. ผู้ใช้ซื้อ NFT ผ่านฟังก์ชัน buyItem ในสัญญา TreasureMarketplaceBuyer อันดับแรก ฟังก์ชันนี้จะคำนวณราคาซื้อทั้งหมดและป้อน Token ที่จำเป็นสำหรับการชำระเงินลงในสัญญา จากนั้นเรียก buyItem ในสัญญา TreasureMarketplace เพื่อซื้อ NFT จากตลาด ไปยังสัญญา TreasureMarketplaceBuyer จากนั้นโอน NFT ไปยังผู้ใช้จากสัญญา TreasureMarketplaceBuyer
2. ในสัญญา TreasureMarketplace:
พบว่าถ้าพารามิเตอร์ _quantity ที่เข้ามาเป็น 0 คุณสามารถส่ง requirement(listedItem.quantity >= _quantity,"not enough quantity"การวิเคราะห์ธุรกรรมการโจมตี
การวิเคราะห์ธุรกรรมการโจมตี
ที่นี่จะแสดงเฉพาะรายละเอียดของธุรกรรมการโจมตีหนึ่งรายการเท่านั้น และวิธีการของธุรกรรมการโจมตีอื่นๆ ก็เหมือนกัน ดังนั้นฉันจะไม่ทำซ้ำที่นี่
ธุรกรรมการโจมตี:
https://arbiscan.io/tx/0x82a5ff772c186fb3f62bf9a8461aeadd8ea0904025c3330a4d247822ff34bc02
ผู้โจมตี:
0x4642d9d9a434134cb005222ea1422e1820508d7b
รายละเอียดการโจมตี:
ดังที่เห็นได้จากรูปด้านล่าง ผู้โจมตีเรียกฟังก์ชัน buyItem ในสัญญา TreasureMarketplaceBuyer และทำให้พารามิเตอร์ _quantity ขาเข้าเป็น 0
สรุป
สรุป
หัวใจหลักของช่องโหว่นี้คือก่อนที่จะถ่ายโอน NFT ของมาตรฐาน ERC-721 จะไม่มีการตัดสินว่าพารามิเตอร์ _quantity ที่เข้ามานั้นไม่ใช่ 0 ซึ่งนำไปสู่ความจริงที่ว่า NFT ของมาตรฐาน ERC-721 สามารถถ่ายโอนได้ โดยตรงและการซื้อ NFT เมื่อคำนวณราคา ต้นทุนที่ต้องการจะคำนวณเป็น 0 เพื่อตอบสนองต่อช่องโหว่ดังกล่าว ทีมรักษาความปลอดภัยของ SlowMist แนะนำว่าก่อนที่จะถ่ายโอน NFT ของมาตรฐาน ERC-721 จำเป็นต้องตัดสินใจให้ดีเกี่ยวกับปริมาณที่เข้ามาเพื่อหลีกเลี่ยงปัญหาดังกล่าวไม่ให้เกิดขึ้นอีก