本文作者:bixia1994
參考鏈接:UUPSUpgradeableVulnerabilityPost-mortem-General/Announcements-OpenZeppelinCommunity
EIP-1967
在UUPS中,其實現了EIP-1967
作為一個實現EIP-897的代理合約,其在代理合約中會實現這兩個函數。
UUPSEIP-1822
EIP-1822討論的合約升級模式與Openzeppelin的透明合約升級模式的不同點在于:EIP-1822的代理合約只讀取實現合約的地址,并將所有的方法都代理給實現合約,包括修改實現合約地址的邏輯部分也在實現合約里。而透明合約升級模式中,proxy合約管理著實現合約的地址,要實現合約升級,只需要在proxy合約中更改實現合約的地址即可。其他的邏輯代理給實現合約。
也就是說EIP-1822的實現合約既包含了普通的業務邏輯處理,更包含了自身的升級邏輯處理。簡單來講就是EIP-1822的實現合約部分,都需要繼承自一個公共的可升級實現合約:proxiable
加密支付初創公司FLUUS完成60萬美元pre-seed輪融資:金色財經報道,加密支付初創公司FLUUS宣布完成60萬美元pre-seed輪融資, FHS Capital、Encryptus.io和一批天使投資人參投。FLUUS即將發布Beta測試版,旨在幫助更多消費者訪問Web3服務,比如代幣質押和Swap,目前該公司已和在線約會門戶網站Dua.com和GD10 Ventures生態系統達成合作伙伴關系。[2023/3/1 12:35:25]
functionupgradeToAndCall(addressnewImplementation,bytesmemorydata)externalpayablevirtual{}function_authorizeUpgrade(addressnewImplementation)internalonlyOwner(){}
其中,openzeppelin通過回滾檢測,來檢查是否升級成功,避免了EIP-1822中遇到的問題:
美國Cuustomers銀行招聘新團隊深化加密貨幣業務:金色財經報道,總部位于美國賓夕法尼亞州的Cuustomers銀行聘請了大量新員工,以擴大其新興數字資產銀行業務的專業知識。客戶銀行總裁兼首席執行官Sam Sidhu表示,我們承諾成為為商業加密貨幣和數字資產機構提供服務的頂級金融機構之一,我們了解加密貨幣客戶的所有要求、隱患和需求。這些客戶需要一個擁有技術和靈活性的金融合作伙伴,以便在整個生態系統中根據他們的要求進行擴展,而不僅僅是在他們業務的一個或兩個方面。
此前金色財經報道,賓夕法尼亞州的Cuustomers銀行在10月份表明了其在數字資產領域競爭的意圖,將加密貨幣公司作為客戶加入,并利用該銀行自己的內部數字法幣推出了實時加密貨幣對美元的支付平臺。(finextra)[2022/1/10 8:39:07]
function_upgradeToAndCallSecure(addressnewImplementation,bytesmemorydata,boolforceCall)internal{//第一步:設置newImpl地址到實現合約地址addressoldImplementation=_getImplementation();_setImplementation(newImplementation);//第二步:針對新的實現合約地址進行初始化if(data
公告 | 火幣韓國將于7月25日15:00開放UUU交易:據火幣韓國站官方公告,其將于7月25日15:00正式開放U Network (UUU)交易 ,上線UUU/BTC、 UUU/ETH交易對。行情顯示,UUU現全球市值達65,278,143 USD,排名第90。[2019/7/24]
//第三步:執行回滾檢查//PerformrollbacktestifnotalreadyinprogressStorageSlot
}
Openzepplin的實現漏洞分析
在上述的Openzeppelin的實現中,其通過回滾檢測避免了EIP-1822中遇到的問題:即升級到一個不滿足EIP-1822規范的合約時,此時代理合約和實現合約就完全被鎖死,無法繼續升級。但是其又引入了一個新的問題,即:回滾操作中事實上模擬了一遍新的實現合約地址中的upgradeTo操作,并且是通過delegatecall方式來進行調用。
通過delegatecall調用新合約地址的upgradeTo方法有什么問題呢?
聲音 | Tuur Demeester:比特幣正在成為一個具有諸多特性的協議棧:數字貨幣經濟學家Tuur Demeester發推稱,比特幣正在成為一個平臺——一個具有諸多特性的協議棧,這些特性包括:1、 價值儲存;2、 低信托財富轉移;3、 機密事務;4、通證化證券;5、大額支付網絡;6、小額交易;7、 智能合約/可編程的錢。[2019/1/22]
查看黃皮書中關于delegatecall的定義為:
Message-callintothisaccountwithanalternativeaccounts'code,butpersistingthecurrentvaluesforsenderandvalue
thismeansthatthereceipientisinfactthesameaccountasatpersent,simplythatthecodeisoverwrittenandthecontextisalmostentirelyidentical
動態 | 短賬號 kr 被 zytzmfuuqx32 賬戶競得:據 IMEOS 報道,zytzmfuuqx32 于北京時間2018-12-20 04:56:17 以 15200.0 EOS 競得賬戶名 kr。[2018/12/21]
從黃皮書的定義來看,delegatecall事實上保存了當前賬戶的余額和msg
functionmint(addressto,uint256amount)publiconlyOwner{_mint(to,amount);}function_authorizeUpgrade(addressnewImplementation)internalonlyOwneroverride{}}
注意這里的TestToken是UUPS升級合約的實現合約部分,而不是代理合約部分。那么應該如何去做這個TestToken的POC呢?
POC
這里不能直接在malicious合約中的upgradeTo方法中寫selfdestruct,而是應該利用ForceCall部分的delegatecall,并通過寫入rollbackTesting
function_authorizeUpgrade(addressnewImplementation)internal{}}
討論
那么在openzeppelin的UUPS實現中,使用delegatecall來進行回滾測試有什么問題呢?
問題就是:
Address
}
上述openzeppelin實現的代碼中,最為核心的一條是理解:當delegatecall到一個selfdestruct方法后,程序所有的代碼都會被直接清空,不會繼續往下執行,也就不會去執行后面的require判斷條件。
然而在remix中執行時,發現delegatecall之后的require語句還是執行了:
這是不對的,需要進一步理解黃皮書中關于selfdestruct這個opcode的定義:
selfdestruct:Haltexecutionandregisteraccountforlaterdeletion
function_functionDelegateCall(addresstarget,bytesmemorydata)privatereturns(bytesmemory){require(AddressUpgradeable
當delegatecall到一個selfdestruct的方法時,其返回值為0,然后代碼繼續運行。如果此筆交易在后續的執行過程中成功,則上下文地址上的代碼將會被清空。如果該筆交易在后續的執行過程中失敗,則整體狀態會回滾。
參考資料
bixia1994-互聯網小工:https://learnblockchain.cn/people/3295
UUPSUpgradeableVulnerabilityPost-mortem-General/Announcements-OpenZeppelinCommunity:https://forum.openzeppelin.com/t/uupsupgradeable-vulnerability-post-mortem/15680
ContractsWizard-OpenZeppelinDocs:https://docs.openzeppelin.com/contracts/4.x/wizard
免責聲明:作為區塊鏈信息平臺,本站所發布文章僅代表作者個人觀點,與鏈聞ChainNews立場無關。文章內的信息、意見等均僅供參考,并非作為或被視為實際投資建議。
本文來源于非小號媒體平臺:
登鏈社區
現已在非小號資訊平臺發布105篇作品,
非小號開放平臺歡迎幣圈作者入駐
入駐指南:
/apply_guide/
本文網址:
/news/10378667.html
免責聲明:
1.資訊內容不構成投資建議,投資者應獨立決策并自行承擔風險
2.本文版權歸屬原作所有,僅代表作者本人觀點,不代表非小號的觀點或立場
上一篇:
每周編輯精選WeeklyEditors'Picks
鏈聞消息,虛擬現實元宇宙項目Bloktopia完成420萬美元私募輪融資,AnimocaBrands領投.
1900/1/1 0:00:00據Cryptonews報道,德國財政部長兼副總理奧拉夫·舒爾茨最近發表的聲明證明,數字歐元確實是一個可靠的想法。與推出數字人民幣相比,推出數字歐元要困難得多.
1900/1/1 0:00:00金色財經報道,根據巴塞爾委員會的咨詢文件,加密貨幣資產被分為“兩組/三類”。首先,文件判定第一組加密資產可以是代幣化的傳統資產,亦或是存在一個穩定機制的加密資產,其價值能掛鉤某類傳統資產;而未滿.
1900/1/1 0:00:00親愛的用戶:“幣安寶”現已上線PIVX定期理財活動,為用戶提供閑置數字資產增值服務。定期理財活動:申購模式:先到先得申購時間:東八區時間2021年09月29日20:00至2021年09月30日2.
1900/1/1 0:00:00尊敬的XT用戶: 因核實到PLAY鏈上轉賬出現多筆失敗情況,導致用戶提現無法正常到賬,為保障用戶資產權益不受威脅,XT現已暫停PLAY充提及隱藏其交易業務,待與項目方核實并解決以上問題后.
1900/1/1 0:00:00公告編號2021092801各位關心ZBG的投資者們和項目方:ZBG平臺現已恢復HT(HECO),DOG,MDX的充提幣.
1900/1/1 0:00:00