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

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

問題描述

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

然而吆寨,由于用戶編寫函數(shù)時習慣性的使用function進行聲明赏淌,從而導致構(gòu)造函數(shù)constructor的使用引入新的漏洞。

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

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

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

3份合約地址如下,請項目方自查辣卒,或與我們?nèi)〉寐?lián)系:


對應(yīng)視頻:
https://v.qq.com/x/page/t1344wir41t.html
通過VaaS平臺的自動化工具檢測掷贾,準確定位到了錯誤代碼的位置,并高亮顯示荣茫。

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

鏈安科技安全審計團隊發(fā)現(xiàn)想帅,上述問題合約使用的Solidity編譯器版本包含了0.4.15、0.4.23啡莉,而只有在Solidity0.4.22版本后港准,合約的constructor()函數(shù)才被視為構(gòu)造函數(shù)的形式,并且直到下一版本才會對function constructor()的形式給出警告(注意:這里僅僅是警告咧欣,不是錯誤)浅缸。如果是使用Solidity0.4.23之前的版本,編譯器把function constructor()作為普通函數(shù)進行編譯魄咕,認為是正確的普通函數(shù)衩椒。
鏈安科技智能合約安全審計團隊對存在該問題的合約進行了深入分析,由于該函數(shù)不符合構(gòu)造函數(shù)形式哮兰,所以以太坊平臺將把constructor函數(shù)作為普通函數(shù)供任何用戶進行調(diào)用毛萌。進一步, owned合約的function constructor()函數(shù)的功能是將創(chuàng)建者地址賦予給owner喝滞,用于后續(xù)的身份驗證阁将。因此,任意賬戶地址都可以調(diào)用constructor()函數(shù)囤躁,并修改owner的值冀痕,導致合約管理權(quán)限被盜用荔睹。


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

漏洞驗證

安全審計小組將問題合約在Ropsten測試鏈上對該問題進行了進一步驗證言蛇,發(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.更換另一個版本的solidity編譯器吨拗,執(zhí)行constructor函數(shù),發(fā)現(xiàn)owner被更改婿斥,說明該漏洞存在:


image.png

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

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


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

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

如何避免將會導致的風險

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



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

問題總結(jié)

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

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

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

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末椒丧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子救巷,更是在濱河造成了極大的恐慌壶熏,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浦译,死亡現(xiàn)場離奇詭異棒假,居然都是意外死亡溯职,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門帽哑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谜酒,“玉大人,你說我怎么就攤上這事祝拯∩醮” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵佳头,是天一觀的道長鹰贵。 經(jīng)常有香客問我,道長康嘉,這世上最難降的妖魔是什么碉输? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮亭珍,結(jié)果婚禮上敷钾,老公的妹妹穿的比我還像新娘。我一直安慰自己肄梨,他們只是感情好阻荒,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著众羡,像睡著了一般侨赡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上粱侣,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天羊壹,我揣著相機與錄音,去河邊找鬼齐婴。 笑死油猫,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的柠偶。 我是一名探鬼主播情妖,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼诱担!你這毒婦竟也來了鲫售?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤该肴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后藐不,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匀哄,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡秦效,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了涎嚼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片阱州。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖法梯,靈堂內(nèi)的尸體忽然破棺而出苔货,到底是詐尸還是另有隱情,我是刑警寧澤立哑,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布夜惭,位于F島的核電站,受9級特大地震影響铛绰,放射性物質(zhì)發(fā)生泄漏诈茧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一捂掰、第九天 我趴在偏房一處隱蔽的房頂上張望敢会。 院中可真熱鬧,春花似錦这嚣、人聲如沸鸥昏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吏垮。三九已至,卻和暖如春卧土,著一層夾襖步出監(jiān)牢的瞬間惫皱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工尤莺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留旅敷,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓颤霎,卻偏偏與公主長得像媳谁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子友酱,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容

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