
踐行者社區(qū)
NBA幾天前剛發(fā)售了他們的NFT系列The Association NFT,將240個球員各制作了75個NFT,總共供應(yīng)18000個,白名單持有者可以free mint 1 個。
想一想NBA在全球范圍內(nèi)都具有龐大的粉絲群體,不少的愛好者都在努力成為白名單而努力做任務(wù)沖資格,甚至有些人花費數(shù)千美金從二手商手中購買,白名單可以獲得MINT低價然后坐等升值,在巨大的獲利空間里帶來的熱度自然引來科學家們的覬覦,據(jù)說有些科學家繞過白名單的限制僅僅只支付了些少許的GAS費就free mint了100個,轉(zhuǎn)手就放在opensea出售,輕輕松松獲取巨額財富,這可苦了辛苦等候白名單資格的用戶,紛紛跑去官方平臺上維權(quán)哭訴,不久后官方平臺也在官推特發(fā)文稱:“我們認識到智能合約的問題,它導致白名單供應(yīng)提前售罄。目前正在識別白名單中無法鑄造NFT的錢包。”
我們來看看這次NBA官方布署的智能合約有哪些漏洞
1.合約中的verify函數(shù)沒有對發(fā)送者地址進行確認,導致非白名單用戶可以通過復制白名單用戶的簽名進行mint
先看看mint 白名單的實現(xiàn)過程,以前土辦法人工錄入再mint時檢驗成功后打一次GAS費,白名單人數(shù)少時還好,一多就傻了,又慢又貴,所以現(xiàn)在NFT市場普遍采用梅克爾樹這種加密簽名驗證來節(jié)省更多的GAS費,方法就是將白名單不要存儲在鏈上合約中,而是放在鏈下由項目方自己保管,當用戶在官網(wǎng)mint時根據(jù)用戶的錢包地址用算法生成一個簽名,NBA這次使用的就是加密簽名方式的校驗,這次問題就出在白名單錢包地址輸入返回簽名時合約無法對這個錢包所有者身份進行確認,也就是說所有人都可以用這個白名單的錢包地址來獲得合法簽名,拿到簽名就可以進行mint了
2.利用白名單用戶MINT成功后的16進制Input Data的信息來獲得合約地址
再來看看16進制是什么意思?使用Matemask錢包轉(zhuǎn)賬給別人時都會輸入一定的數(shù)據(jù),比如合約地址,這些數(shù)據(jù)就會調(diào)用接口函數(shù)傳入?yún)?shù),數(shù)據(jù)在后臺運行并都會以16進制的方式來壓縮,正常錢包對這些后臺管理是不會顯示,不過好在Matemask錢包在高級設(shè)置里有個是否顯示16進制數(shù)據(jù)的開關(guān)可以打開。
那16進制有什么用?,簡單來說就是利用白名單成功mint后找到16進制的input data信息來提取開頭顯示為0x的合約地址,再復制粘貼進自己想要打款的項目方地址欄,輸入Gas費用完成Mint,這個白名單的16進制提供的合約地址因為上面合約verify函數(shù)的漏洞打款成功就可以完成mint了。
一句話:因為官方合約verify函數(shù)漏洞通過白名單地址可以拿到簽名,然后通過16進制數(shù)據(jù)找出合約地址,支付Gas費成功Mint.
這次官方合約的代碼中只要多加一層檢驗,來驗證白名單地址和最終要mint的錢包地址是否一致的就可以避免這次科學家薅羊毛的行為,這應(yīng)該是官方的一次工作疏忽。
那后來官方又做了什么舉動呢?
NBAxNFT官方表示,因智能合約問題導致提前售罄,正識別白名單中無法鑄造NFT的錢包。針對這次的漏洞,官方已經(jīng)確定在白名單列表中但是無法鑄造NFT的錢包地址,并將向這些地址空投The Association NFT。為了做到這一點,The Association系列總量將從18000枚增加至30000枚,對應(yīng)2022年NBA季后賽240個球員的NFT版本將從每一位球員75個增加到125個。
好了,這次的NBA的NFT鑄造漏洞過程也剖析完了,利用漏洞獲得一波財富福利也算是知識效應(yīng),現(xiàn)在你們是不是又Get到什么新的知識點了嗎?