【鏈安報(bào)告】3份合約又存在Owner權(quán)限被盜問題——低級(jí)錯(cuò)誤不容忽視

2018年7月12日,成都鏈安科技(LianAn Technology)智能合約審計(jì)小組使用自主研發(fā)的VaaS平臺(tái)對(duì)以太坊鏈上智能合約進(jìn)行安全審計(jì)的過程中,發(fā)現(xiàn)了3份合約存在新的安全漏洞。此漏洞是合約構(gòu)造函數(shù)constructor()使用不當(dāng)從而導(dǎo)致Owner權(quán)限被盜。

問題描述

以太坊solidity0.4.22引入了新的構(gòu)造函數(shù)聲明形式constructor(),該函數(shù)引入的目的是避免編程人員在編寫構(gòu)造函數(shù)時(shí)的命名錯(cuò)誤 (如6月22日,MorphToken事件中“Owned”被寫成“owned”,沒有注意大小寫,使owned函數(shù)成為一個(gè)普通函數(shù),導(dǎo)致任何賬戶都能調(diào)用它,更改owner變量,轉(zhuǎn)移合約所有權(quán))。

然而,由于用戶編寫函數(shù)時(shí)習(xí)慣性的使用function進(jìn)行聲明,從而導(dǎo)致構(gòu)造函數(shù)constructor的使用引入新的漏洞。

正確的構(gòu)造函數(shù)形式:constructor() public { }

錯(cuò)誤的構(gòu)造函數(shù)形式:function constructor() public { }

成都鏈安科技使用 VaaS平臺(tái)對(duì)以太坊區(qū)塊鏈上智能合約進(jìn)行了分析,發(fā)現(xiàn)如下3份智能合約存在constructor函數(shù)使用不當(dāng)導(dǎo)致Owner權(quán)限被盜的問題。

3份合約地址如下,請(qǐng)項(xiàng)目方自查,或與我們?nèi)〉寐?lián)系:


對(duì)應(yīng)視頻:
https://v.qq.com/x/page/t1344wir41t.html
通過VaaS平臺(tái)的自動(dòng)化工具檢測,準(zhǔn)確定位到了錯(cuò)誤代碼的位置,并高亮顯示。

問題分析:敏感函數(shù)使用不當(dāng)

鏈安科技安全審計(jì)團(tuán)隊(duì)發(fā)現(xiàn),上述問題合約使用的Solidity編譯器版本包含了0.4.15、0.4.23,而只有在Solidity0.4.22版本后,合約的constructor()函數(shù)才被視為構(gòu)造函數(shù)的形式,并且直到下一版本才會(huì)對(duì)function constructor()的形式給出警告(注意:這里僅僅是警告,不是錯(cuò)誤)。如果是使用Solidity0.4.23之前的版本,編譯器把function constructor()作為普通函數(shù)進(jìn)行編譯,認(rèn)為是正確的普通函數(shù)。
鏈安科技智能合約安全審計(jì)團(tuán)隊(duì)對(duì)存在該問題的合約進(jìn)行了深入分析,由于該函數(shù)不符合構(gòu)造函數(shù)形式,所以以太坊平臺(tái)將把constructor函數(shù)作為普通函數(shù)供任何用戶進(jìn)行調(diào)用。進(jìn)一步, owned合約的function constructor()函數(shù)的功能是將創(chuàng)建者地址賦予給owner,用于后續(xù)的身份驗(yàn)證。因此,任意賬戶地址都可以調(diào)用constructor()函數(shù),并修改owner的值,導(dǎo)致合約管理權(quán)限被盜用。


注:msg.sender 為當(dāng)前操作賬戶地址、owner為合約管理者地址

漏洞驗(yàn)證

安全審計(jì)小組將問題合約在Ropsten測試鏈上對(duì)該問題進(jìn)行了進(jìn)一步驗(yàn)證,發(fā)現(xiàn):
1.由于缺少構(gòu)造函數(shù),初始化 owner值為0:



2.使用remix調(diào)用constructor函數(shù),發(fā)現(xiàn)交易失敗,分析后發(fā)現(xiàn)data字段不是constructor的函數(shù)簽名:


3.更換另一個(gè)版本的solidity編譯器,執(zhí)行constructor函數(shù),發(fā)現(xiàn)owner被更改,說明該漏洞存在:


image.png

Owner權(quán)限過大存在的安全隱患

Owner是Solidity語言中對(duì)智能合約開發(fā)者的稱呼,owner的能力猶如集齊6顆無限寶石的滅霸,屬于超級(jí)權(quán)限。對(duì)前100基于以太坊ERC20協(xié)議智能合約(例如Bancor、Augur、MakerDAO、KyberNetwork、EnigmaMPC的智能合約)安全事件進(jìn)行分析后,超級(jí)權(quán)限被盜可存在如下安全隱患:
?隨時(shí)凍結(jié)代幣轉(zhuǎn)賬
?任意鑄造發(fā)行新的代幣
?銷毀任意賬戶內(nèi)的代幣
?額外增發(fā)代幣
?停止整套交易系統(tǒng)運(yùn)行
Owner權(quán)限如此之大,說明眾多“去中心化”的產(chǎn)品,實(shí)際上暗藏一個(gè)一擊必殺按鈕,掌握在開發(fā)者的手上,所有對(duì)代幣虎視眈眈的黑客或者內(nèi)部人員都會(huì)想方設(shè)法奪取這個(gè)按鈕的控制權(quán)。


Dogecoin創(chuàng)始人Jackson Palmer的推特評(píng)論

如此強(qiáng)大的權(quán)限一旦被黑客竊取,相當(dāng)于從滅霸手上搶到了無限拳套,黑客可以對(duì)依賴智能合約交易的代幣為所欲為,無論是凍結(jié),增發(fā),還是自毀,只需要調(diào)用合約中一個(gè)函數(shù)就可輕松實(shí)現(xiàn),進(jìn)而操縱整個(gè)代幣的價(jià)值。而與之相關(guān)的代幣也必將遭受沖擊,后果不堪設(shè)想。

如何避免將會(huì)導(dǎo)致的風(fēng)險(xiǎn)

既然合約開發(fā)者可能會(huì)存在使用constructor函數(shù)不當(dāng),那么作為項(xiàng)目方應(yīng)該如何去防范后期可能造成的風(fēng)險(xiǎn)呢?我們給出下面兩種建議方法:
1.新的constructor使用方法為,前面無function聲明:



2.Remix-ide等編譯器會(huì)對(duì)constructor的錯(cuò)誤使用產(chǎn)生警告,開發(fā)者千萬不要忽略編譯器告警,推薦更改源碼,消除所有編譯器警告。

問題總結(jié)

鏈安科技團(tuán)隊(duì)整合審計(jì)小組的驗(yàn)證結(jié)果以及各區(qū)塊鏈安全專家的意見后指出該漏洞導(dǎo)致的后果可能有:
1.合約可被普通用戶竊取owner權(quán)限;
2.目前很多ERC20代幣部署的時(shí)候?qū)⑺写鷰虐l(fā)放到owner賬戶中,如果出現(xiàn)此漏洞,可導(dǎo)致用戶無限增發(fā)代幣;
以及更多取決于owner權(quán)限的嚴(yán)重后果(也許就像滅霸打一個(gè)響指,代幣灰飛煙滅?)。
此次owner權(quán)限漏洞雖然來源于代碼編寫上的低級(jí)錯(cuò)誤,但更多的是引起開發(fā)者對(duì)owner權(quán)限問題的反思,過于神化的owner權(quán)限必然導(dǎo)致owner權(quán)限漏洞成為眾矢之的,而低級(jí)錯(cuò)誤導(dǎo)致的此類漏洞是絕不應(yīng)該出現(xiàn)的。

項(xiàng)目方及開發(fā)者應(yīng)引起足夠重視

因此,鏈安科技團(tuán)隊(duì)強(qiáng)烈呼吁廣大開發(fā)者在合約編寫上遵守開發(fā)規(guī)范,并且在寫合約敏感函數(shù)(如構(gòu)造函數(shù)、回調(diào)函數(shù))時(shí),應(yīng)嚴(yán)格遵循官方命名要求,同時(shí)千萬不要忽略編譯器告警,在合約發(fā)布到主鏈之前,應(yīng)在官方提供的測試網(wǎng)站上進(jìn)行充分驗(yàn)證。必要的時(shí)候采用形式化驗(yàn)證手段,從多角度分析合約代碼,找出那些容易忽略的問題,并且做到防患于未然。
同時(shí),項(xiàng)目方在合約編寫完成后,應(yīng)當(dāng)尋求有質(zhì)量保證的智能合約安全審計(jì)團(tuán)隊(duì)進(jìn)行合約安全審查,保證合約的安全性和功能準(zhǔn)確性,防患于未然。

「成都鏈安科技」
作為火幣網(wǎng)、OKex、KuCoin等著名交易所指定的合約審計(jì)公司。 歡迎聯(lián)系鏈安,進(jìn)行智能合約安全審計(jì)。本文原始鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 2018年7月12日,成都鏈安科技(LianAn Technology)智能合約審計(jì)小組使用自主研發(fā)的VaaS平臺(tái)...
    筆名輝哥閱讀 1,104評(píng)論 0 50
  • 區(qū)塊鏈游戲江山如畫, 安全防護(hù)未規(guī)劃, 一片殘陽西掛。 區(qū)塊鏈行業(yè)日新月異,發(fā)展迅猛,各個(gè)公鏈及項(xiàng)目方奇思妙想層出...
    宇宙永恒閱讀 136評(píng)論 0 0
  • (注:本文是在原文的基礎(chǔ)上,根據(jù)個(gè)人的理解,修改部分內(nèi)容并添加了一些注釋) 買賣部分代碼未調(diào)試通過 基礎(chǔ)版的代幣合...
    中v中閱讀 3,127評(píng)論 0 2
  • 6月14日精進(jìn)。今日體驗(yàn),生活中自律的人才是自由的,否則你就會(huì)成為你情緒的奴隸。
    呂志剛l閱讀 136評(píng)論 0 0
  • 日精進(jìn)--73天 今天所想:如何讓自己變的更大氣? 任何事情只看現(xiàn)在眼前的利益,怎能配合長久?----價(jià)值 ...
    Alina_qi閱讀 195評(píng)論 0 0

友情鏈接更多精彩內(nèi)容