JavaScript 不可用。

我们检测到浏览器禁用了 JavaScript。请启用 JavaScript 或改用支持的浏览器来继续访问

Rubixi 抢 owner 攻击事件(构造函数失控)的 Solidity 源码分析 [紧急上线未测试]

作者:Anban Chu

发表日期:2018年03月08日

所属目录:黑客攻击

合约地址

核心代码

// 合约名字原本是 DynamicPyramid ,但是上线前修改成了 Rubixi 并且未测试直接发布
contract Rubixi {
        uint private collectedFees = 0;
        address private creator;

        //Sets creator
        // 合约名字修改后,构造函数名称没有更改,它将变成正常的可调用函数。
        // 任何人都可以调用它
        function DynamicPyramid() {
                creator = msg.sender;
        }

        modifier onlyowner {
            if (msg.sender == creator) _
        }

        //Fee functions for creator
        // 任何人都可以提取手续费,只需先把自己设置为 owner
        function collectAllFees() onlyowner {
                if (collectedFees == 0) throw;

                creator.send(collectedFees);
                collectedFees = 0;
        }
}

反思

这个问题已经不可能出现了,构造函数在 solidity v0.4.22 改为 constructor 了。不会再出现这个问题了。

我们需要反思的是临时修改合约的时候,不能直接上线。我们写代码的时候,一定要写单元测试。保险起见,上线后还需要走 E2E 测试(区块链上做啥都要钱,所以很多人为了省钱不太做这些事情。为了安全还是需要多测试的)。

这个合约大概是没有单元测试,或者上线前没有执行单元测试。否则单元测试不可能通过。

相关攻击案例





以上就是本篇文章的全部内容了,希望对你有帮助。

>> 本站不提供评论服务,技术交流请在 Twitter 上找我 @anbang_account