📜 [專欄新文章] Parity 錢包合約漏洞
✍️ Peter Lai
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
還記得今年 7 月 Parity 錢包合約被找到漏洞,結果駭客偷走了將近 150,000 個以太幣,會發生是因為智能合約的 callback 裡使用了 delegatecall(msg.data),這個函數會呼叫 data 中的函數並將 msg.sender 設為元呼叫函數的地址,駭客利用這一點呼叫了 initWallet,這時你們可能會以為 Parity 應該有在 initWallet 設置條件阻擋駭客就不能呼叫,結果竟然是沒有!所以駭客就成功並改變合約的擁有者,最後再把以太幣轉走,細節的部分可以看這篇文章。
Parity 也在幾天後修復了這個問題,修復的方式就是在 init* 函數加上 only_uninitialized modifier 判斷,當 m_numOwners > 0 時這個函數就不能使用,這時應該會想說不會再有漏洞了吧,畢竟智能合約能操作以太幣,誰知道……
就在前幾天發布了新 issue 說他不小心刪除了錢包的合約,因為只有合約的擁有者可以刪除,那麼他到底怎麼刪除合約?可以看到錢包合約被刪除前共有兩筆交易,第一筆交易呼叫 initWallet 並將合約的擁有者設為自己。
function initWallet(address[] _owners, uint _required, uint _daylimit) only_uninitialized { initDaylimit(_daylimit); initMultiowned(_owners, _required);}
交易結果:
Function: initWallet(address[] _owners, uint256 _required, uint256 _daylimit)MethodID: 0xe46dcfeb[0]:0000000000000000000000000000000000000000000000000000000000000060[1]:0000000000000000000000000000000000000000000000000000000000000000[2]:0000000000000000000000000000000000000000000000000000000000000000[3]:0000000000000000000000000000000000000000000000000000000000000001[4]:000000000000000000000000ae7168deb525862f4fee37d987a971b385b96952
第二筆交易呼叫了 kill 函數,而 kill 函數呼叫了 suicide (selfdestruct 函數的別稱,功能是將合約程式從區塊鏈移除,並將合約剩餘的以太幣轉給參數的位置),錢包的程式就從區塊鏈上移除了。
function kill(address _to) onlymanyowners(sha3(msg.data)) external { suicide(_to);}
交易結果:
Function: kill(address _to)MethodID: 0xcbf0b0c0[0]:000000000000000000000000ae7168deb525862f4fee37d987a971b385b96952
因為很多使用這個錢包的合約引入位置都寫死導致很多合約不能運作,在 Polkadot 裡第 451 行就將錢包合約地址寫死:
address constant _walletLibrary = 0x863df6bfa4469f3ead0be8f9f2aae51c91a907b4;
因為所有邏輯判斷都在錢包合約中,所以其他相依於錢包合約的現在以太幣都被凍結,且看起來像這樣 (無法提款):
contract Wallet { function () payable { Deposit(...) }}
Parity 官方還在了解可行的解決方案,如果想查詢自己有沒有被影響可以到這個網站。
參考
Security Alert - Parity Technologies
https://hackernoon.com/parity-wallet-hack-2-electric-boogal…
Parity 錢包合約漏洞 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
同時也有10000部Youtube影片,追蹤數超過2,910的網紅コバにゃんチャンネル,也在其Youtube影片中提到,...
「callback function」的推薦目錄:
- 關於callback function 在 Taipei Ethereum Meetup Facebook 的精選貼文
- 關於callback function 在 軟體開發學習資訊分享 Facebook 的最佳解答
- 關於callback function 在 愛流浪的小風 Facebook 的最佳解答
- 關於callback function 在 コバにゃんチャンネル Youtube 的最佳貼文
- 關於callback function 在 大象中醫 Youtube 的精選貼文
- 關於callback function 在 大象中醫 Youtube 的最佳貼文
- 關於callback function 在 Re: [問題] 有關callback function使用? - 看板C_and_CPP 的評價
- 關於callback function 在 你懂JavaScript 嗎?#23 Callback | Summer。桑莫。夏天 的評價
- 關於callback function 在 An Essential Guide to JavaScript Callbacks 的評價
- 關於callback function 在 How to access the correct `this` inside a callback - Stack ... 的評價
- 關於callback function 在 Registrare una callback - gists · GitHub 的評價
callback function 在 軟體開發學習資訊分享 Facebook 的最佳解答
--課程更新通知--
這堂課去年我們有辦過團購,有上過的人都給了不錯的評價,今天收到 Wes bos 的更新通知,涵蓋了 ES7/ES2016 有購買的人都可以免費更新
更新內容如下
Here are the new videos. #49 is updated for Babel 7 and replaces the use of babel-preset-es2015 with the autoprefixer-like babel-preset-env preset.
49 - All About Babel + npm scripts
67 - Async Await - Native Promises Review
68 - Async Await - Custom Promises Review
69 - All About Async + Await
70 - Async + Await Error Handling Approaches
71 - Waiting on Multiple Promises
72 - Promisifying Older Callback Based Functions
73 - A look ahead at Class Properties
74 - padStart and padEnd
75 - ES7 Exponential Operator
76 - Function Arguments Trailing Comma
77 - Object.entries() and Object.keys()
https://softnshare.wordpress.com/…/…/31/es6foreveroneupdate/
callback function 在 愛流浪的小風 Facebook 的最佳解答
一年一度的 ModernWeb 又來啦!
這次會帶來一個新的分享主題,
和大家聊聊關於 Javascript 的非同步程式喔,
歡迎大家一起來聊聊天~
關於 Javascript 非同步的那些事兒 -
在 Javascript 的世界中,最重要的事情之一就是如何處理非同步的程式碼,從早期的 Callback function 和 Promise ,一直到最近的 Generator 和 Async/ Await 都各有其優缺點,這次將向大家從頭開始回顧在 Javascript 非同步的原理,以及撰寫非同步程式的各種方式!
callback function 在 コバにゃんチャンネル Youtube 的最佳貼文
callback function 在 大象中醫 Youtube 的精選貼文
callback function 在 大象中醫 Youtube 的最佳貼文
callback function 在 你懂JavaScript 嗎?#23 Callback | Summer。桑莫。夏天 的推薦與評價
第三方提供的追蹤程式 function trackPurchase(purchaseData, callback) { // 執行追蹤... callback(); // 控制權轉回結帳程式 }. ... <看更多>
callback function 在 An Essential Guide to JavaScript Callbacks 的推薦與評價
A callback is a function passed into another function as an argument to be executed later. Callback functions can be synchronous or asynchronous. Was this ... ... <看更多>
callback function 在 Re: [問題] 有關callback function使用? - 看板C_and_CPP 的推薦與評價
※ 引述《breakingdown (Loneliness in Taipei)》之銘言:
: 用C語言寫…
: 是在trace程式碼時產生的疑問…
: 原本寫法是直接呼叫函式,
: 但是後來有位前輩將幾個常會呼叫到的函數,
: 初始化時先存在一個function pointer arrary裡,
: 然後若需用到某一個function就呼叫對應到的function pointer array~
: 看起來就是間接呼叫的感覺…
: 不過改成這樣寫有什麼好處嗎?除了版面變簡單外…
^^^^^^^^
方便維護與修改
: 這就是所謂callback function嗎?
^^^^^^^^^
其實真的差蠻多的
: 謝謝~
先說說 function pointer 的東西,
小弟私以為,只有單用 function pointer,
除非是用在傳遞類似像 qsort 這種要自定義比較大小的東西外,
基本上單用沒什麼戰鬥力, 大多都是形成 function pointer array 才看得出它的好處
-----------------
假設一個簡單的問題, 已知 a,b 二數,
輸入 0: 加法;
輸入 1: 減法;
輸入 2: 除法;
輸入 3: 乘法
如果你是用
if (x==0) add()
else if(x==1) sub()
else if(x==2) mlu()
else if(x==3) div()
或是用 switch-case 方式, 那會很不好維護。假設今天又臨時加了一、二個功能
程式碼可能會是一長串的 if-else,用 function pointer array 會較適合,
也顯得較易修改
程式碼可以參考這裡 https://nopaste.csie.org/97101
(要改的話就改 function pointer array 初值便可)
裡面有一行很少有書提到 (其實我是沒找到有書提到)
typedef double(*myFuncPtr)(double, double); // typedef better
這是把 myFuncPtr 定義為一種資料形態,這種資料型態就是 bala bala 的函式指標,
這在製作、調用 dll/lib 時是蠻常看到的, 私以為先定義起來是較好的。
--------------------
再補一個好了, 其實之前 "私以為" 在 C 裡面, function pointer 是可以
進行 "某種程度" 上 的封裝, ex:
typedef struct _tagFile{
void (*Open)(char* filename);
void (*Write)(char* buffer);
void (*Read)(char* buffer);
void (*Close)();
}File;
這樣有什麼好處的話.. 嗯.. 可能去學 C++ 感受會強烈一點
----------------------
至於您說的 callback function,
事實上它的運作機制和一般main裡寫的 function 運作機制不同;
main 裡面寫的是「主動」去 call 你寫的 function,
callback 是「被動」等待某個條件產生才去執行你寫的 function,
這個條件通常指的是訊息的發生。比如說視窗上某個按鈕被按時,
才會去呼叫你寫的函式,便是「被動」等待 user 去按按鈕。
這部份要說絕對說不完,視窗程設本身就屬於一個龐大的機制,
有興趣去摸一下簡單的 win32 程式設計,大致上可以有基本的概念。
--
YouLoveMe() ? LetItBe() : LetMeFree();
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 180.177.76.142
※ 編輯: tropical72 來自: 180.177.76.142 (02/21 23:29)
※ 編輯: tropical72 來自: 180.177.76.142 (02/21 23:49)
... <看更多>