溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何從以太坊MorphToken事件看智能合約構造函數大小寫編碼錯誤漏洞

發布時間:2021-12-24 11:25:13 來源:億速云 閱讀:171 作者:柒染 欄目:安全技術

如何從以太坊MorphToken事件看智能合約構造函數大小寫編碼錯誤漏洞,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

一、漏洞概述

以太坊智能合約的含義就是一組代碼(函數)和數據(合約的狀態),它們位于以太坊區塊鏈的一個特定地址上。智能合約一般使用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 可以明顯的看到相關大小寫編寫錯誤:

如何從以太坊MorphToken事件看智能合約構造函數大小寫編碼錯誤漏洞

以太坊智能合約中的構造函數主要用于初始化,如:確定合約的所有者,并且只會在合約部署時運行。在小于0.4.22版本的solidify編譯器語法要求中,構造函數的名稱應該和合約名稱保持一致。如果程序員在編寫合約時將構造函數名稱寫錯,那么原本的構造函數將成為任何人都可以調用的普通函數。漏洞示例代碼及在Remix-ide中的復現結果如下:

0x01 漏洞合約部署

下圖中,Bank合約繼承自Owned合約。在Owned合約中,由于錯誤的編碼,將構造函數名稱寫錯,owned函數成為了一個普通函數??梢钥吹?,Bank合約部署后,由于缺少構造函數,初始化時owner為0x0000000000000000000000000000000000000000。

如何從以太坊MorphToken事件看智能合約構造函數大小寫編碼錯誤漏洞

0x02 漏洞現場還原

任何以太坊賬戶都可以調用Bank合約繼承自Owned合約的owned函數,更改Bank合約的owner變量,從而使合約所有權發生轉移。

如下如所示,0x14723a09acff6d2a60dcdf7aa4aff308fddc160c這個賬戶調用了Bank合約的owned函數后,可以看到Bank合約的owner變成了0x14723a09acff6d2a60dcdf7aa4aff308fddc160c。同理,攻擊者也可以利用這個漏洞提權,實施一系列惡意操作。

如何從以太坊MorphToken事件看智能合約構造函數大小寫編碼錯誤漏洞

三、漏洞影響評估

我們使用內部的以太坊智能合約審計系統對以太坊主鏈上所有30000+公開智能合約進行了自動化審計,確認受該大小寫編碼漏洞影響的共計16個,以下為統計結果:

(受漏洞影響程度取決于合約的邏輯,具體代碼審計結果可聯系知道創宇404區塊鏈安全研究團隊)

如何從以太坊MorphToken事件看智能合約構造函數大小寫編碼錯誤漏洞    

理論上在合約部署后,由于編碼錯誤引起的構造函數缺失,owner默認值會變為0x0000000000000000000000000000000000000000,這樣合約中涉及到owner的函數調用都會異常,合約所有者應該能及時發現漏洞才是。然而MorphToken這種市值幾百萬美金的代幣,因為合約存在這個編碼漏洞而被盜幣。通過分析Morph Token源代碼,我們得到了答案。MorphToken繼承了Owned合約,但是自己實現了構造函數。就是說,是父合約向外留了一個“后門”。    

如何從以太坊MorphToken事件看智能合約構造函數大小寫編碼錯誤漏洞

另一種情況,如果合約中沒有涉及owner權限的函數調用,那么即使攻擊者盜取了合約所有權,也沒有任何用處。上表B2X合約中就是這種情況。

總體來說,受漏洞影響的合約數量不多,屬于被MorphToken帶著“火”了一把的漏洞。

事實上,很多安全漏洞都來源于程序員的粗心編碼,智能合約這種部署后即不可更改的更應加強代碼審計。

四、防護方案

0.4.22版本以后的solidity編譯器引入了constructors關鍵字,以替代低版本的將合約名作為構造函數名的語法,從而避免程序員編碼錯誤。強烈建議采用最新版本編譯器。

如何從以太坊MorphToken事件看智能合約構造函數大小寫編碼錯誤漏洞如何從以太坊MorphToken事件看智能合約構造函數大小寫編碼錯誤漏洞

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女