BlockSec团队近日发现某数字藏品合约存在两个严重漏洞。这两个漏洞可能导致用户资产被锁定以及项目方无法提取超过3400万美元的资金。第一个漏洞涉及退款功能。合约中的退款函数使用循环为所有用户进行退款,但如果其中某个用户是恶意合约,可能会拒绝接收退款并导致整个交易失败。这将阻止所有用户获得退款。幸运的是,这个漏洞并未被利用。对于有退款需求的项目,建议采取以下安全措施:1. 限制参与者仅为外部拥有账户(EOA)2. 使用ERC20代币如WETH,而非原生资产3. 设计用户主动申领退款的机制,避免批量退款第二个漏洞是一个代码错误。在提取项目资金的函数中,存在一个条件判断错误。该函数应比较退款进度与投标索引,但错误地与总投标数进行了比较。由于退款进度永远小于总投标数,且不再增加,导致条件永远无法满足。这使得项目方无法提取锁定在合约中的资金。这些漏洞再次凸显了知名项目也可能出现基本错误。开发团队需要编写充分的测试用例,并具备基本的安全意识。虽然安全审计在去中心化金融领域已成常规做法,但在数字藏品项目中仍显不足,这次事件造成了巨额损失。这一事件提醒我们,即使是备受关注的项目也可能存在严重漏洞。它强调了在区块链项目开发中进行全面安全审计的重要性,特别是在处理大额资金时。项目方应该更加重视合约安全,以防止类似的costly错误发生。
BlockSec发现数字藏品合约两大漏洞 3400万美元资金受困
BlockSec团队近日发现某数字藏品合约存在两个严重漏洞。这两个漏洞可能导致用户资产被锁定以及项目方无法提取超过3400万美元的资金。
第一个漏洞涉及退款功能。合约中的退款函数使用循环为所有用户进行退款,但如果其中某个用户是恶意合约,可能会拒绝接收退款并导致整个交易失败。这将阻止所有用户获得退款。幸运的是,这个漏洞并未被利用。
对于有退款需求的项目,建议采取以下安全措施:
第二个漏洞是一个代码错误。在提取项目资金的函数中,存在一个条件判断错误。该函数应比较退款进度与投标索引,但错误地与总投标数进行了比较。由于退款进度永远小于总投标数,且不再增加,导致条件永远无法满足。这使得项目方无法提取锁定在合约中的资金。
这些漏洞再次凸显了知名项目也可能出现基本错误。开发团队需要编写充分的测试用例,并具备基本的安全意识。虽然安全审计在去中心化金融领域已成常规做法,但在数字藏品项目中仍显不足,这次事件造成了巨额损失。
这一事件提醒我们,即使是备受关注的项目也可能存在严重漏洞。它强调了在区块链项目开发中进行全面安全审计的重要性,特别是在处理大额资金时。项目方应该更加重视合约安全,以防止类似的costly错误发生。