買以太坊 買以太坊
Ctrl+D 買以太坊
ads
首頁 > Polygon > Info

ENT:UUPSUpgradeable 漏洞分析_CAL幣

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(){}

公告 | 火幣韓國將于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]

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

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

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

動態 | EOS競猜游戲uugame遭隨機數攻擊:今天下午18:24-18:40之間,PeckShield安全盾風控平臺DAppShield監測到黑客向EOS競猜類游戲uugame發起連續攻擊,獲利數千EOS ,并已轉至幣安交易所。PeckShield安全人員在此提醒,新上線部署的游戲合約存在安全問題的可能性較大,開發者應在合約上線前做好安全測試,特別是要排除已知攻擊手段的威脅,必要時可尋求第三方安全公司協助,幫助其完成合約上線前攻擊測試及基礎安全防御部署。[2019/1/10]

}

Openzepplin的實現漏洞分析

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

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

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

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

Message-callintothisaccountwithanalternativeaccounts'code,butpersistingthecurrentvaluesforsenderandvalue

thismeansthatthereceipientisinfactthesameaccountasatpersent,simplythatthecodeisoverwrittenandthecontextisalmostentirelyidentical

經濟學家Tuur Demeester認為分叉會帶來經濟損失:經濟學家Tuur Demeester今日表示分叉能夠為最大化用戶使用效率提供良好的解決方案,但是Token持有者來說很難保障他們現有的經濟利益。[2018/3/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

Tags:IONCALENTALLMillion PixelCAL幣QuotientMETAALLBI

Polygon
比特幣:新一輪央行等十部門「通知」傳遞出五點重要信號_HEFI價格

吳說作者|火小律 內容獨家授權吳說編輯轉載9月24日下午,央行等十部門全網連發《關于進一步防范和處置虛擬貨幣交易炒作風險的通知》,傳遞出5大信號.

1900/1/1 0:00:00
DEF:DeFi游戲:將成為真正的游戲規則改變者_DEFY價格

文:JINIASHAWDAGOR編譯:Zion?????? 責編:karen 過去幾個月,隨著加密市場的看漲,去中心化金融(DeFi)平臺獲得了狂熱追捧.

1900/1/1 0:00:00
BIT:BitMart首發上線ESP Coin Project (E$P)_ITM

親愛的BitMart用戶:BitMart將于2021年10月8日首發上線代幣ESPCoinProject(E$P)。屆時將開通E$P/USDT交易對.

1900/1/1 0:00:00
加密貨幣:干貨分享 | 加密貨幣:我去匿名干點壞事_Coinbase Pro

美國國會參議院8月10日以69票贊成、30票反對的投票結果通過了總額約1萬億美元的《基礎設施投資和就業法案》,該法案決定籌集280億美元以加強對加密貨幣的稅收執法.

1900/1/1 0:00:00
GATE:Gate.io 支持一鍵參與KSM插槽拍賣活動火熱進行中(目前Kintsugi BTC領先)_HTT

第九次波卡插槽拍賣正在火熱進行中。目前KintsugiBTC以172,952.5764KSM的質押量排名靠前,截至2021年9月29日14:00,Gate.ioKINT鎖倉理財已鎖133.713.

1900/1/1 0:00:00
IOTE:關于支持IoTeX(IOTX)網絡升級和硬分叉的公告_Baby Symbiote

親愛的用戶:幣安將支持IoTeX的網絡升級和硬分叉,具體安排如下: 幣安 預計將于東八區時間2021年10月12日05:00暫停IOTX代幣的充值、提現業務.

1900/1/1 0:00:00
ads