韩国国家级区块链项目ICON(ICX)智能合约代码近日被爆代码存在安全漏洞,使transfer功能失效。虽然黑客无法利用这次漏洞盗币,但该漏洞会导致包括转账、交易等重要功能无法正常使用。据闻,项目方已积极投入大量资源修复漏洞并保证交易不受影响。
ICON到底出了什么安全漏洞?
在ICX的合约中,有一个功能可以开启/关闭合约的转账功能。最初,此功能的设计是只有ICX合约的所有者拥有调用它的权限;由于代码写错了逻辑运算符号,导致除了合约所有者之外的任何人都能随意开启和关闭该合约的转账功能。
让我们来看一下这段代码:
require(msg.sender != walletAddress); // 错误!
从代码逻辑上来看,“!=” 表示“不等于”, “==” 表示“等于”.
很明显的,这行代码应该写成:
require(msg.sender == walletAddress); // 正确!
事后来看,这几行代码所展现的错误很直接了当,可开发过程中要面对的是成百上千行代码,这样的繁杂就会带来对漏洞的忽略。而传统检测和安全审计服务不仅耗时耗力,还容易出现人为失误,导致不必要的损失。
怎么保证智能合约代码无漏洞?
为了探求如何能避免这类型的错误再次发生,小编请CertiK(Certik.org)--形式化验证平台帮忙做了一个深入检测,了解到CertiK如何通过将智能标签运用到源代码中,快速并且全自动化的检测安全漏洞。
上图就是CertiK检测ICX漏洞的实际过程,完整的演示了漏洞的验证过程及修复建议。据悉,ICX智能合约已经在上线做过多轮的安全“审计”,但可是这样的错误还是成了漏网之鱼。如果ICX当时能使用CertiK的形式化验证服务,这次事故很可能可以避免。
最后,小编还是要提醒智能合约要上线的各位,尽早让形式化验证平台为你的合约保驾护航。
附上ICX源代码: