快捷搜索:  网络  后门  CVE  渗透  木马  扫描  黑客  as

从以太坊MorphToken事故看智能合约组织函数大小写编码错误漏洞

1、漏洞概述

以太坊智能合约的含义就是一组代码(函数)以及数据(合约的状态),它们位于以太坊区块链的一个特定地址上。智能合约一般使用solidity说话编写。

Morpheus Network与全国上一些大型航运、海关以及银行公司协商,通过行使区块链的智能合约手艺确立一个周全服务的、环球性的、自动化的、开放的供应链平台以及一个集成的加密货币支付体系 ,发布基于以太坊的 MorphToken。

2018年6月22日,Morpheus Network 发公告称将发布新的智能合约,以更新目前含有漏洞的合约代码。新的Token名称为MRPH,新旧Token以1:1兑换。

随后,知道创宇404区块链安全研究团队最先漏洞应急,通过阐发MorphToken合约代码以及交易历史,确定该漏洞是由于大小写编码问题,错误的将Owned合约的组织函数Owned的首字母小写,使之成为了一个普通函数owned,任何以太坊账户均可调用该函数争夺合约的所有权,进一步完成盗币等系列非法操作。随即我们发布了相干应急讲演,同时我们也注意到BCSEC安全团队发布了相干的阐发文档。

在后续的研究中,我们发现早在2017年8月29日,Github上就有人提到了这类因组织函数缺失导致的合约安全漏洞问题。该漏洞目前影响包括MorphToken、B2X、DoubleOrNothingImpl等多个智能合约。

二、漏洞道理

在MorphToken的合约代码里:https://etherscan.io/address/0x2ef27bf41236bd859a95209e17a43fbd26851f92#code 可以显然的看到相干大小写编写错误:

1.png

以太坊智能合约中的组织函数首要用于初始化,如:确定合约的所有者,并且只会在合约部署时运行。在小于0.4.22版本的solidify编译器语法请求中,组织函数的名称应该以及合约名称保持一致。要是程序员在编写合约时将组织函数名称写错,那么原有的组织函数将成为任何人都可以调用的普通函数。漏洞示例代码及在Remix-ide中的复现效果以下:

0×01 漏洞合约部署

下图中,Bank合约继承自Owned合约。在Owned合约中,由于错误的编码,将组织函数名称写错,owned函数成为了一个普通函数。可以看到,Bank合约部署后,由于缺少组织函数,初始化时owner为0×0000000000000000000000000000000000000000。

2.png

0×02 漏洞现场还原

任何以太坊账户都可以调用Bank合约继承自Owned合约的owned函数,更改Bank合约的owner变量,从而使合约所有权发生转移。

以下如所示,0x14723a09acff6d2a60dcdf7aa4aff308fddc160c这个账户调用了Bank合约的owned函数后,可以看到Bank合约的owner变成了0x14723a09acff6d2a60dcdf7aa4aff308fddc160c。同理,攻击者也能够行使这个漏洞提权,实施一系列恶意操作。

3.png

3、漏洞影响评估

我们使用内部的以太坊智能合约审计体系对以太坊主链上所有30000+地下智能合约进行了自动化审计,企业黑客,确认受该大小写编码漏洞影响的总计16个,下列为统计效果:

(受漏洞影响程度取决于合约的逻辑,详细代码审计效果可联系知道创宇404区块链安全研究团队)

4.png

理论上在合约部署后,由于编码错误引起的组织函数缺失,owner默认值会变为0×0000000000000000000000000000000000000000,如许合约中触及到owner的函数调用都会异常,合约所有者应该能及时发现漏洞才是。然而MorphToken这类市值几百万美金的代币,因为合约存在这个编码漏洞而被盗币。通过阐发Morph Token源代码,我们得到了谜底。MorphToken继承了Owned合约,然则本人完成了组织函数。就是说,是父合约向外留了一个“后门”。

5.png

另一种情形,要是合约中没有触及owner权限的函数调用,那么即使攻击者盗取了合约所有权,也没有任何用场。上表B2X合约中就是这类情形。

团体来说,受漏洞影响的合约数量不久不多,属于被MorphToken带着“火”了一把的漏洞。

究竟上,很多安全漏洞都来源于程序员的粗心编码,智能合约这类部署后即不可更改的更应加强代码审计。

4、防护方案

0.4.22版本之后的solidity编译器引入了constructors症结字,以替换低版本的将合约名作为组织函数名的语法,从而避免程序员编码错误。强烈建议采用最新版本编译器。

6.png7.png

5、相干链接

[1] Morpheus 官网
https://morpheus.network/
[2] 官方公告
https://medium.com/@themorpheus/new-morpheus-network-token-smart-contract-91b80dbc7655
[3] 以太坊主链智能合约
https://etherscan.io/contractsVerified
[4] 合约组织函数缺失漏洞示例
https://github.com/trailofbits/not-so-smart-contracts/blob/master/missing_constructor/Missing.sol
[5] 漏洞详情参考
https://bcsec.org/index/detail?id=157&tag=1

*

您可能还会对下面的文章感兴趣: