以太坊價格 以太坊價格
Ctrl+D 以太坊價格
ads

CAL:UUPSUpgradeable 漏洞分析

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

UUpool宣布已下架Chia礦池服務:據官方公告,Chia排名第二的礦池UUpool宣布,已于2021年05月17日中午12:00停止Chia礦池服務。5月17日12:00前發起提現的交易已全部處理,2021年05月21日24:00將關閉提現通道。此前在5月16日,UUpool表示由于目前Chia礦池協議機制不完善,多挖雙挖方案屢禁不止,目前Chia團隊也暫未給出高效的解決方案,為了保護正常挖礦礦工的權益,決定暫時下線Chia礦池,待Chia官方出新的礦池協議后,視情況決定是否重新上線,用戶可正常提現不受影響。[2021/5/17 22:12:18]

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

Adamant Capital創始人Tuur Demeester疑似宣布退圈:加密貨幣領域KOL、Adamant Capital創始人Tuur Demeester今日發推稱:“2020年,我的(社交媒體)動態中比特幣相關內容占比已由80%降至20%-30%。在我探索新興趣的過程中,能與你們繼續對話,我感到受寵若驚,也非常感激。需要說明的是,我仍然熱愛比特幣。我所感覺到的是,隨著生態系統的成熟,我對增值的熱情正在一點點減弱。不知何故,我喜歡探索新的領域。我覺得我已經在尋找下一個東西了,因為我覺得比特幣很快就將走向繁榮。”[2020/3/19]

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

}

Openzepplin的實現漏洞分析

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

動態 | 香港Enecuum公司正在開發基于Trinity混合共識協議的區塊鏈:據Bits.media消息,香港Enecuum公司正在開發基于Trinity混合共識協議的區塊鏈,其中包括移動設備上的工作量證明(PoW),權益證明(PoS)和移動活動證明(PoA)礦工。所有新開發項目準備就緒后,將部署到Enecuum測試網絡并由實際用戶進行測試。[2019/12/25]

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

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

Message-callintothisaccountwithanalternativeaccounts'code,butpersistingthecurrentvaluesforsenderandvalue

thismeansthatthereceipientisinfactthesameaccountasatpersent,simplythatthecodeisoverwrittenandthecontextisalmostentirelyidentical

聲音 | Tuur Demeester:比特幣類似2003年的亞馬遜股票,處在后泡沫時代的牛市:在BitcoinExchangeGuide的最新分析文章中,比特幣資本方Adamant Capital的創始人Tuur Demeester把這一情形比喻做“比特幣的后泡沫牛市。”

Demeester將比特幣與亞馬遜股票作比較。亞馬遜股票同樣在1999年的100美元位下跌到2001年的10美元。2003年的互聯網泡沫破滅后,亞馬遜股票從20美元攀升至60美元,又在同年跌到40美元。在其后的四年,亞馬遜漲至100美元,并且在2009年漲至130美元。現在亞馬遜的股票價格是1883.51美元。像亞馬遜一樣,比特幣的價格當然會經歷波動,但是如今的比特幣是一個驚爆價。應當大力買入。[2019/9/8]

從黃皮書的定義來看,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:IONENTCALALLSociety of Galactic ExplorationENT價格Novara Calcio Fan TokenWalletreum

幣贏交易所
NFT:NFT周刊|Dapper Labs獲得2.5億美元融資;無聊猿與好萊塢合作;《時代》雜志發布NFT

上周對于NFT來說是漫長的一周,圍繞潛在黑客的討論非常多,DapperLabs籌集了新一輪的融資,無聊猿猴簽署了代理協議。一如往常,我們將回顧過去七天NFT領域的重大新聞.

1900/1/1 0:00:00
HTT:HomiEx(紅米交易所)關于停止BTC、ETH、USDT幣種BEP20和HECO鏈充提的公告

親愛的用戶: HomiEx現已暫停BTC、ETH、USDT幣種BEP20和HECO鏈的充提服務,并不再支持以上幣種BEP20和HECO鏈的充提。用戶可選擇其他鏈進行充提.

1900/1/1 0:00:00
區塊鏈:支付寶、騰訊入局數字藝術品市場,國產數字藝術品平臺未來會走向何方?

9月24日中午,名為“街舞怪才”的用戶在淘寶阿里拍賣平臺拍賣編號為NO.1的杭州亞運會數字火炬數字藝術品。有用戶出價至大約315萬人民幣.

1900/1/1 0:00:00
COM:XT關于恢復FTM充提的公告

尊敬的XT用戶: FTM錢包升級已完成,XT現已恢復FTM充值與提幣業務,暫停期間給您帶來的不便,敬請諒解.

1900/1/1 0:00:00
COI:大幣網(Dcoin)關于永續合約系統升級維護公告(2021/9/30)

親愛的大幣網(Dcoin)用戶:為了提升服務質量,進一步優化合約交易體驗,大幣網將于2021年9月30日00:10進行永續合約系統升級維護,預計時長為1小時.

1900/1/1 0:00:00
區塊鏈:內蒙古巴彥淖爾市發改委查獲虛擬貨幣“礦機”10100臺

近日,內蒙古自治區巴彥淖爾市發展和改革委員會等有關部門接到群眾舉報,在巴彥淖爾市經濟開發區中小企業創業園發現一處堆放虛擬貨幣“挖礦”設備的倉庫,查獲“礦機”10100臺.

1900/1/1 0:00:00
ads