以太坊再现安全漏洞——太阳风暴“solar-storm”,或殃及全网智能合约
以太坊智能合约脚本语言Solidity又现一处漏洞,它不仅会对DAO产生影响,还会对整个以太坊生态系统产生影响。
以太坊中的合约通常会相互进行call调用。社区鼓励这种行为是希望最终实现智能合约间的“互补”。
当以太坊合约进行相互调用时,它们自身的程序控制和状态功能会丢失。这个漏洞是由Augur核心开发人员Joey Krug 和Gnosis联合创始人Martin Köppelmann发现的,后来由康奈尔大学博士生Philip Daian和研究者Emin Gun Sirer共同发布。
这个漏洞与DAO攻击者利用的可重入性(reentrancy)(注:可重入与递归概念相似,关于DAO攻击漏洞,官方用词是递归调用漏洞,这里的可重入性是作者个人观点)的漏洞不同。暂且称之为太阳风暴(solar-storm)吧(因为它能切断以太坊智能合约间的沟通,就像太阳风暴能切断地球的通讯设备一样)。Daian在发布这个漏洞时并未给出确切的名字,不过他挺喜欢“太阳风暴”的。
太阳风暴 VS 可重入性
可重入性(reentrancy)漏洞发生的前提:
1. 合约A,函数A call调用合约B
2. 合约B call调用合约A,函数A
Daian认为,合约间仅一次简单的调用也会暴露漏洞。
太阳风暴(solar-storm)漏洞发生的前提:
1. 合约A call调用任意外部合约
2. 合约A状态经外部函数修改(这是经常会发生的情况)
因此太阳风暴(solar-storm)漏洞发生的例子有:
1. 合约A,函数A call调用合约B
2. 合约A的另一个函数C与函数A共享状态
3. 合约B call调用合约A,函数C
为了避免暴露这种漏洞,我们有两种选择:
(a)禁止合约进行外部调用
(b)禁止使用外部调用函数与发起外部调用的函数共享状态
在实际用例中完全禁止b是不可能的,因此我们必须不再进行合约外部调用。如果不得已必须进行外部调用,可以在编程完成之后进行,一旦外部调用开始执行,合约状态不要再做更改。
太阳风暴(solar-storm)漏洞比可重入性(reentrancy)漏洞涉及面更广。
这意味着什么呢?
总结
太阳风暴(solar-storm)漏洞不单会对DAO合约产生影响,还会对以太坊的所有合约产生影响。这是以太坊编程语言Solidity的漏洞。
已经发布的以太坊合约也可能存在漏洞。开发者需测试其合约的性能,采取相应措施(转移资金、发布新合约等)。
开发者对其即将发布的合约的外部调用要相当小心。尽量避免外部调用,直到这一漏洞彻底修复。
下一步该怎么做?
重新检查所有已发布的智能合约。用Solidity编译器检测漏洞。这一漏洞目前尚未广而告之,因此应编写Solidity文档向其他人发出通知。
声明:此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。本网站所提供的信息,只供参考之用。
-
比特币续刷新高逼近 10 万美元 满手山寨的我该怎么办?
2024-11-23 -
SEC主席Gensler下台倒计时 加密行业拨云见日
2024-11-23 -
为什么 ETH 长期颓靡不振?因为 ETH 正处于一个历史性的「换庄」阶段
2024-11-22 -
特朗普当选利好哪些加密板块?十几位风投大佬这样说
2024-11-22 -
比特币冲击10万美元之际:全球经济与金融体系变革的信号已释放
2024-11-22