NBA球員卡NFT合約漏洞百出!沒白名單也可免費鑄造

Perry
分享
NBA球員卡NFT合約漏洞百出!沒白名單也可免費鑄造

NBA 推出的動態 NFT「THE ASSOCIATION」於昨日凌晨正式開放鑄造,許多早期進入 Discord 的支持者皆能獲得白名單資格。然而,卻因為智能合約漏洞,導致許多沒有白名單的用戶也能夠大量鑄造,進而使得部分符合資格的用戶損失權益。

THE ASSOCIATION NFT 合約漏洞

根據 Azuki 開發人員 cygaar 的說法,若想利用其合約漏洞,只需將此數據發送到尚未鑄造過的錢包上的合約地址。無需擁有白名單資格也可以進行此操作。

Image

將這段數據反編譯後,你會看到它調用的函數是 mint_approved,仔細觀察 info 中的參數會發現這段程式碼主要是用來判斷交易是否由鑄造網站簽名,以及用戶是否在白名單內。然而,它少了一個關鍵部分,他沒有去檢查 info.from == msg.sender.

廣告 - 內文未完請往下捲動

這意味者同樣的簽名能被任何人重複利用,只需一個有效的簽名便可無限循環。雖然一個錢包僅能鑄造一次,但要創建一個新錢包不過就是幾秒鐘的事情而已。

此外,cygaar 提出了一個更大的疏失。合約並沒有檢查交易是否來自用戶,若能多添加一行:require(tx.origin == msg.sender, ‘Caller not user’),即可降低合約被濫用的風險。

上述漏洞被發現後,被許多有心人士利用,導致 NFT 在短時間內被鑄造完畢,甚至導致有白名單的用戶無法鑄造。

「整理來看,合約看起來非常草率。隨意的註解、大小寫不一致、許多未使用的變數,且沒有進行優化」cygaar 說道。

為了使智能合約更加安全完善,cygaar 給了幾點建議:

  • 妥善地進行簽名驗證,確保簽名來自訊息發送方
  • 對合約多用點心,別再只是到處複製貼上
  • 聘請審計員,任何合格的審計員皆能在短時間內發現這些漏洞

官方致歉

在事情發生後,NBAxNFT 立即於其 Twitter 表達歉意,他們當前正在確認因漏洞導致無法鑄造的白名單錢包。若有問題可於其 Discord 反應。

增發 12,000 張球員卡 (4/22 更新)

根據官方最新聲明,其已確認那些有白名單資格卻無法鑄造的用戶錢包,這些用戶將收到一個 THE ASSOCIATION NFT 作為補償。

不過,此系列的 NFT 也將由原先的 18,000 個增發至 30,000 個,每位球員的張數也由 75 張增加至 125 張。

相關資料:THE ASSOCIATION NFT 合約程式碼、THE ASSOCIATION NFT 合約持有者