NBA推出的动态NFT THE ASSOCIATION于昨日凌晨正式开放铸造,许多早期进入Discord的支持者皆能获得白名单资格。然而,却因为智能合约漏洞,导致许多没有白名单的用户也能够大量铸造,进而使得部分符合资格的用户损失权益。
THE ASSOCIATION NFT合约漏洞
根据Azuki开发人员cygaar的说法,若想利用其合约漏洞,只需将此数据发送到尚未铸造过的钱包上的合约地址。无需拥有白名单资格也可以进行此操作。
将这段数据反编译后,你会看到它调用的函数是mint_approved,仔细观察info中的参数会发现这段代码主要是用来判断交易是否由铸造网站签名,以及用户是否在白名单内。然而,它少了一个关键部分,他没有去检查info.from==msg.sender.
这意味者同样的签名能被任何人重复利用,只需一个有效的签名便可无限循环。虽然一个钱包仅能铸造一次,但要创建一个新钱包不过就是几秒钟的事情而已。
此外,cygaar提出了一个更大的失误。合约并没有检查交易是否来自用户,若能多添加一行:require(tx.origin==msg.sender,‘Callernotuser’),即可降低合约被滥用的风险。
上述漏洞被发现后,被许多有心人士利用,导致NFT在短时间内被铸造完毕,甚至导致有白名单的用户无法铸造。
「总体来看,合约看起来非常草率。随意的注解、大小写不一致、许多未使用的变数,且没有进行优化」cygaar说道。
为了使智能合约更加安全完善,cygaar给了几点建议:
1.妥善地进行签名验证,确保签名来自讯息发送方
2.对合约多用点心,别再只是到处复制粘贴
3.聘请审计员,任何合格的审计员皆能在短时间内发现这些漏洞
官方致歉
在事情发生后,NBAxNFT立即于其Twitter表达歉意,他们当前正在确认因漏洞导致无法铸造的白名单钱包。若有问题可于其Discord反应。