NBA球员卡NFT合约漏洞百出!没白名单也可免费铸造
在昨日的拂晓时刻,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上寻求帮助。