合约没有保证白名单签名只能被特定用户使用而且只能使用一次,攻击者可以重用其他白名单用户签名铸造藏品。
原文标题:《如何错误验证签名: NBA 数字藏品发现为例》
撰文:BlockSec Team
NBA 最近发行了数字藏品,然而我们发现,其售卖数字藏品的合约存在非常严重的漏洞。攻击者(「科学家」)可以通过漏洞无成本铸造藏品然后出售获利。
漏洞的成因在于对白名单用户的签名校验有安全问题。具体来说,合约没有保证白名单签名只能被特定用户使用而且只能使用一次。因此,攻击者可以重用其他白名单用户签名铸造藏品。
从代码我们可以看出,verify 函数并没有将发送者地址放到签名中。另外,也没有机制保证该签名只能被使用一次。我们认为这一些安全实践是最基本的软件安全入门知识。我们非常惊讶这样的漏洞居然出现在非常知名的项目里面。
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。