以太幣交易所 以太幣交易所
Ctrl+D 以太幣交易所
ads
首頁 > 聚幣 > Info

UUPSUpgradeable 漏洞分析_ION

Author:

Time:1900/1/1 0:00:00

本文作者: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

美國Cuustomers銀行招聘新團隊深化加密貨幣業務:金色財經報道,總部位于美國賓夕法尼亞州的Cuustomers銀行聘請了大量新員工,以擴大其新興數字資產銀行業務的專業知識。客戶銀行總裁兼首席執行官Sam Sidhu表示,我們承諾成為為商業加密貨幣和數字資產機構提供服務的頂級金融機構之一,我們了解加密貨幣客戶的所有要求、隱患和需求。這些客戶需要一個擁有技術和靈活性的金融合作伙伴,以便在整個生態系統中根據他們的要求進行擴展,而不僅僅是在他們業務的一個或兩個方面。

此前金色財經報道,賓夕法尼亞州的Cuustomers銀行在10月份表明了其在數字資產領域競爭的意圖,將加密貨幣公司作為客戶加入,并利用該銀行自己的內部數字法幣推出了實時加密貨幣對美元的支付平臺。(finextra)[2022/1/10 8:39:07]

functionupgradeToAndCall(addressnewImplementation,bytesmemorydata)externalpayablevirtual{}function_authorizeUpgrade(addressnewImplementation)internalonlyOwner(){}

OpenZeppelin Contracts V4.1 發布 引入廉價 UUPS 代理:據官方消息,以太坊技術服務商 OpenZeppelin 發布 OpenZeppelin Contracts V4.1 版本,該版本引入 UUPS 代理作為透明代理的一種更為便宜的替代方案,另外,新的 ERC20 擴展允許使用內置的閃電鑄造(flash minting)輕松創建代幣。此外,一個新的效用合約提供了一種批處理機制,而不需要進行任何額外的設置。[2021/4/30 21:13:30]

其中,openzeppelin通過回滾檢測,來檢查是否升級成功,避免了EIP-1822中遇到的問題:

function_upgradeToAndCallSecure(addressnewImplementation,bytesmemorydata,boolforceCall)internal{//第一步:設置newImpl地址到實現合約地址addressoldImplementation=_getImplementation();_setImplementation(newImplementation);//第二步:針對新的實現合約地址進行初始化if(data

庫幣Pool-X平臺將開啟Enecuum持倉挖礦:據庫幣KuCoin交易所消息,庫幣Pool-X平臺將于12月25日6點開啟Enecuum(ENQ)持倉挖礦功能,用戶將ENQ代幣轉入Pool-X錢包,即可獲得收益。[2020/12/24 16:24:50]

//第三步:執行回滾檢查//PerformrollbacktestifnotalreadyinprogressStorageSlot

}

Openzepplin的實現漏洞分析

在上述的Openzeppelin的實現中,其通過回滾檢測避免了EIP-1822中遇到的問題:即升級到一個不滿足EIP-1822規范的合約時,此時代理合約和實現合約就完全被鎖死,無法繼續升級。但是其又引入了一個新的問題,即:回滾操作中事實上模擬了一遍新的實現合約地址中的upgradeTo操作,并且是通過delegatecall方式來進行調用。

通過delegatecall調用新合約地址的upgradeTo方法有什么問題呢?

Shen ZhouUnion特邀嘉賓Anthony:構建基于實體商業的數字經濟生態是化解當前市場窘境的最佳答案:據官方消息,2020年12月10日由神州交易所所舉辦的神州交易所“CNU公鏈上線發布會”杭州站正式啟動。

作為此次會議的主題“CNU公鏈上線發布會”,Shen ZhouUnion特邀嘉賓Anthony表示,區塊鏈4.0時代開創者,未來將會在Shenzhou Union底層交易所技術平臺上實現普及性區塊鏈去中心化商業落地應用,互聯網文明和實體商業有機結合是數字經濟的時代特色,充分發揮節點經濟和數字經濟雙重定位,讓實體商業與數字市場實現真正融合,構建基于實體商業的數字經濟生態,通過技術、資金、資源等多元扶持,打造區塊鏈項目新標桿,是化解當前市場窘境的最佳答案,也是Shenzhou Union的初衷所在。[2020/12/10 14:49:53]

查看黃皮書中關于delegatecall的定義為:

Message-callintothisaccountwithanalternativeaccounts'code,butpersistingthecurrentvaluesforsenderandvalue

聲音 | 經濟學家Tuur Demeester評論V神:硬叉忽視用戶主權:V神轉發比特幣核心開發人員Luke Dashjr的推特,針對其提出的比特幣網絡太脆弱、易受攻擊的觀點,V神回復:應該訓練用戶在治理中發揮積極作用, 并通過更硬的分叉保持他們的軟件經常更新。數字貨幣經濟學家Tuur Demeester稍后評論該推文,稱硬叉忽視了用戶主權,這種做法就相當于宣稱為了提高公民的參與度,我們鼓勵他們推翻政府、改寫憲法。[2018/9/25]

thismeansthatthereceipientisinfactthesameaccountasatpersent,simplythatthecodeisoverwrittenandthecontextisalmostentirelyidentical

從黃皮書的定義來看,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

Tags:IONENTCALALLVISION價格SENT幣opticalnetworkminifootball幣銷毀機制

聚幣
AOFEX關於開啟“奇兵之戰,交易&充值奪70,000USDT"活動的公告_FEX

尊敬的用戶: 十月驚喜福利來襲,AOFEX特此開啟「?奇兵之戰,交易&充值奪70,000USDT」活動。玩交易&充值奇兵大戰,享返現紅包.

1900/1/1 0:00:00
Gate.io Startup首發項目Knight War Spirits (KWS)空投結果及上線交易公告_GATE

1.關于首發項目KnightWarSpirits(KWS)空投結果Gate.ioStartup首發項目KnightWarSpirits代幣KWS于2021年09月25日09:00開始下單.

1900/1/1 0:00:00
Jack Dorsey的「BTC計劃」:有前途,但也有問題_ITT

本文來自decrypt,原文作者:JeffJohnRobertsOdaily星球日報譯者|Moni本周,Twitter推出了一項可以改變世界的BTC功能——但前提是.

1900/1/1 0:00:00
DFG創始人James Wo:加密市值超過2萬億美元,足以引起監管機構的注意_DFG

據Nairametrics9月26日消息,數字金融集團創始人JamesWo在Zoom采訪中分享了他對當前加密貨幣監管環境的看法:當加密貨幣市值超過2萬億美元,雖然與更大的資產相比仍然相對較小.

1900/1/1 0:00:00
Rangers Protocol宣布與Litentry達成合作,用戶可在傳統社交網絡上發布自己的加密身份_RAN

RangersProtocol?正式宣布與?Litentry?達成合作,將使用Litentry元宇宙身份應用MyCryptoProfile?為RangersProtocol提供去中心化數字身份驗.

1900/1/1 0:00:00
數字人民幣在農村產權交易場景投入應用_數字人

據新華社消息,9月29日,建設銀行上海市分行與上海農村產權交易所簽署金融服務推動鄉村振興戰略合作協議。雙方將在農村產權交易與涉農普惠金融創新、鄉村振興領域數字人民幣服務等五個領域深入開展合作.

1900/1/1 0:00:00
ads