今年美國大選雖說有了廣泛意義上的塵埃落定,但競選結果並未明確。
如今拜登團隊宣佈勝選,美國媒體紛紛宣佈拜登當選下屆美國總統。而另一方面,川普拒絕接受敗選結果,他持續進行計票,並宣稱要採取法律行動。
造成如今這個混亂結果的首要原因在於美國沒有設立獨立的對大選事務具有權力的權威性的選舉委員會,在預設情況下,是新聞機構承擔了這個角色。假如川普獲得過大的權力,控制了大多新聞機構,營造虛假選票,結果尚未可知。
這就意味著某種程度上,可以說是極盡中心化的“推特治國”後的又一“媒體選舉”。
從選舉,到網際網路,到區塊鏈,2020年,中心化不再是權威的體現,而是“獨斷”、“專權”的代名詞。
北京時間11月9日,CertiK安全研究團隊發現DeFi專案Mercurity.finance智慧合約程式碼部分存在中心化風險。
專案擁有者擁有過大許可權,可以進行任意數目的鑄幣,併為給定賬戶提供任意數目的獎勵。
技術步驟分析如下:
ERC20Token.sol
程式碼地址:
https://github.com/MER-DAO/MEE-core/blob/main/contracts/tokens/ERC20Token.sol
部署地址:
https://etherscan.io/address/0xe1b583dc66e0a24fd9af2dc665f6f5e48978e106#code
圖已: ERC20Token智慧合約建構函式
圖二:onlyIssuer修飾詞
圖三: 具有鑄幣方法的issue函式
如圖一所示,專案擁有者在ERC20Token.sol智慧合約中的建構函式可以將自身設定為issuer身份。由於在智慧合約部署時,其建構函式會被自動執行,因此專案擁有者會自動成為issuer。
透過圖二中顯示的onlyIssuer修飾詞的限制,任意擁有issuer身份的外部呼叫者將可以執行任意被onlyIssuer修飾詞修飾的函式。
因此,擁有issuer身份的專案擁有者可以執行圖三中具有鑄幣方法的issue函式,從而可以為任意賬戶鑄造任意數目的代幣。
除此之外,該專案還存在一個允許專案擁有者提供代幣獎勵的後門。該後門存在與AwardContract.sol智慧合約中。
AwardContract.sol
程式碼地址:
https://github.com/MER-DAO/MEE-core/blob/main/contracts/AwardContract.sol
部署地址:
https://etherscan.io/address/0x8Ea43ce113456f45defd0E27e809d719b9CA2362#code
圖四:AwardContract智慧合約建構函式
圖五:onlyGovernor修飾詞
圖六:addFreeAward智慧合約函式
當AwardContract.sol被專案擁有者部署到區塊鏈上時,AwardContract合約的建構函式會被自動執行,也就意味著圖四中43行程式碼被自動執行後,專案擁有者會自動被賦予governor身份。
擁有governor身份的外部呼叫者可以類似的執行任意被onlyGovernor修飾詞修飾的智慧合約函式,例如圖六中所示addFreeAward函式。
由於所有外部呼叫者都可以透過呼叫圖七中withdraw函式來將屬於自己的獎勵取出,因此當governor身份的外部呼叫者為某一個賬戶(假設為A)新增了某一數量的獎勵後,A賬戶可以對該函式進行呼叫,並透過246行的判斷條件檢查後,透過在281行呼叫safeIssue()函式來取出被新增的獎勵。
圖7:withdraw智慧合約函式
綜上分析,Mercurity.finance專案中智慧合約存在的後門漏洞均來自於專案擁有者許可權過大。在該類中心化治理機制中,專案擁有者得到了可以隨時獲利或者摧毀專案經濟系統的權利。
CertiK安全研究團隊建議Mercurity.finance更新專案中採用的治理系統,引入社羣管理的機制。
CertiK在此提醒廣大使用者:
1. 合約程式碼需要經過嚴格的安全驗證和審計才可被允許公佈。
2. 投資者在投資採用中心化治理機制的專案時需衡量風險,謹慎投資。