NBA最近发行了数字藏品,然而我们发现,其售卖数字藏品的合约存在非常严重的漏洞。攻击者(“科学家”)可以通过漏洞无成本铸造藏品然后出售获利。
漏洞的成因在于对白名单用户的签名校验有安全问题。具体来说,合约没有保证白名单签名只能被特定用户使用而且只能使用一次。因此,攻击者可以重用其他白名单用户签名铸造藏品。
从代码我们可以看出,verify
函数并没有将发送者地址放到签名中。另外,也没有机制保证该签名只能被使用一次。我们认为这一些安全实践是最基本的软件安全入门知识。我们非常惊讶这样的漏洞居然出现在非常知名的项目里面。