【 链安科技】constructor函数使用漏洞

2018年7月12日,成都链安科技(LianAn Technology)智能合约审计小组使用自主研发的VaaS平台对以太坊链上智能合约进行安全审计的过程中,发现了3份合约存在新的安全漏洞。此漏洞是合约构造函数constructor()使用不当从而导致Owner权限被盗。

问题描述

以太坊solidity0.4.22引入了新的构造函数声明形式constructor(),该函数引入的目的是避免编程人员在编写构造函数时的命名错误 (如6月22日,MorphToken事件中“Owned”被写成“owned”,没有注意大小写,使owned函数成为一个普通函数,导致任何账户都能调用它,更改owner变量,转移合约所有权)。

然而,由于用户编写函数时习惯性的使用function进行声明,从而导致构造函数constructor的使用引入新的漏洞。

正确的构造函数形式:constructor() public { }

错误的构造函数形式:function constructor() public { }

成都链安科技使用 VaaS平台对以太坊区块链上智能合约进行了分析,发现如下3份智能合约存在constructor函数使用不当导致Owner权限被盗的问题。

3份合约地址如下,请项目方自查,或与我们取得联系:



通过VaaS平台的自动化工具检测,准确定位到了错误代码的位置,并高亮显示。

问题分析:敏感函数使用不当

链安科技安全审计团队发现,上述问题合约使用的Solidity编译器版本包含了0.4.15、0.4.23,而只有在Solidity0.4.22版本后,合约的constructor()函数才被视为构造函数的形式,并且直到下一版本才会对function constructor()的形式给出警告(注意:这里仅仅是警告,不是错误)。如果是使用Solidity0.4.23之前的版本,编译器把function constructor()作为普通函数进行编译,认为是正确的普通函数。

链安科技智能合约安全审计团队对存在该问题的合约进行了深入分析,由于该函数不符合构造函数形式,所以以太坊平台将把constructor函数作为普通函数供任何用户进行调用。进一步, owned合约的function constructor()函数的功能是将创建者地址赋予给owner,用于后续的身份验证。因此,任意账户地址都可以调用constructor()函数,并修改owner的值,导致合约管理权限被盗用。

image

注:msg.sender 为当前操作账户地址、owner为合约管理者地址

漏洞验证

安全审计小组将问题合约在Ropsten测试链上对该问题进行了进一步验证,发现:

1.由于缺少构造函数,初始化 owner值为0:

image

2.使用remix调用constructor函数,发现交易失败,分析后发现data字段不是constructor的函数签名:

image

3.更换另一个版本的solidity编译器,执行constructor函数,发现owner被更改,说明该漏洞存在:

image
image

Owner权限过大存在的安全隐患

Owner是Solidity语言中对智能合约开发者的称呼,owner的能力犹如集齐6颗无限宝石的灭霸,属于超级权限。对前100基于以太坊ERC20协议智能合约(例如Bancor、Augur、MakerDAO、KyberNetwork、EnigmaMPC的智能合约)安全事件进行分析后,超级权限被盗可存在如下安全隐患:

•随时冻结代币转账

•任意铸造发行新的代币

•销毁任意账户内的代币

•额外增发代币

•停止整套交易系统运行

Owner权限如此之大,说明众多“去中心化”的产品,实际上暗藏一个一击必杀按钮,掌握在开发者的手上,所有对代币虎视眈眈的黑客或者内部人员都会想方设法夺取这个按钮的控制权。

image

▲Dogecoin创始人Jackson Palmer的推特评论

如此强大的权限一旦被黑客窃取,相当于从灭霸手上抢到了无限拳套,黑客可以对依赖智能合约交易的代币为所欲为,无论是冻结,增发,还是自毁,只需要调用合约中一个函数就可轻松实现,进而操纵整个代币的价值。而与之相关的代币也必将遭受冲击,后果不堪设想。

如何避免将会导致的风险

既然合约开发者可能会存在使用constructor函数不当,那么作为项目方应该如何去防范后期可能造成的风险呢?我们给出下面两种建议方法:

1.新的constructor使用方法为,前面无function声明:

image

2.Remix-ide等编译器会对constructor的错误使用产生警告,开发者千万不要忽略编译器告警,推荐更改源码,消除所有编译器警告。

问题总结

链安科技团队整合审计小组的验证结果以及各区块链安全专家的意见后指出该漏洞导致的后果可能有:

1.合约可被普通用户窃取owner权限;

2.目前很多ERC20代币部署的时候将所有代币发放到owner账户中,如果出现此漏洞,可导致用户无限增发代币;

以及更多取决于owner权限的严重后果(也许就像灭霸打一个响指,代币灰飞烟灭?)。

此次owner权限漏洞虽然来源于代码编写上的低级错误,但更多的是引起开发者对owner权限问题的反思,过于神化的owner权限必然导致owner权限漏洞成为众矢之的,而低级错误导致的此类漏洞是绝不应该出现的。

项目方及开发者应引起足够重视

因此,链安科技团队强烈呼吁广大开发者在合约编写上遵守开发规范,并且在写合约敏感函数(如构造函数、回调函数)时,应严格遵循官方命名要求,同时千万不要忽略编译器告警,在合约发布到主链之前,应在官方提供的测试网站上进行充分验证。必要的时候采用形式化验证手段,从多角度分析合约代码,找出那些容易忽略的问题,并且做到防患于未然。

同时,项目方在合约编写完成后,应当寻求有质量保证的智能合约安全审计团队进行合约安全审查,保证合约的安全性和功能准确性,防患于未然。

本文转载自《constructor函数使用漏洞》,版权属于原作者,已获得授权。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容