比特幣行情 比特幣行情
Ctrl+D 比特幣行情
ads
首頁 > Pol幣 > Info

ION: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

Continuum Finance DApp即將上線:1月9日消息,波卡生態項目Continuum Finance宣布將于今日22:00正式開啟其DApp。[2022/1/9 8:36:18]

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

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

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

前 Y Combinator員工Natalie Luu加入Terra擔任生態系統發展負責人:12月21日消息,據Natalie Luu個人博客稱,她已加入Terraform Labs 并將擔任生態系統發展負責人,為在 Terra 上構建的新 dApp 和協議提供服務。Natalie Luu 早期在 Y Combinator 工作,致力于建立大學生態系統工作,后在 Lightspeed Venture Partners 領導投資。曾投資了加密、金融科技、游戲、市場和 SaaS 等多個行業,投資的公司包括 Eco、Epic Games、Finix、Shipper 和 Terra 的原生代幣 LUNA。[2021/12/21 7:53:05]

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

}

Openzepplin的實現漏洞分析

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

UUU(U Network)今日35.77%領漲Hadax:UUU(U Network)的愿景是成為全球“內容價值第一公鏈”,團隊認為內容產業的問題不僅是如何幫內容生產者牟利,更是如何幫用戶發現有價值的內容。UUU(U Network)的這一理念獲得超過30家中美一線機構和項目的投資和支持,包括硅谷殿堂級VCDraper Dragon,硅谷丹華資本DHVC,PreAngel,Qtum(量子鏈),D Fund等。[2018/5/15]

通過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

UUU獲HADAX首批上線資格:2月28日12:00,火幣HADAX投票上幣結束,UUU 以 23371685 票數穩占前十,講首批上幣HADAX。[2018/2/28]

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:IONENTCALTERKryptobellionPRESIDENTDOGE價格CALITTokenBetter Pool

Pol幣
比特幣:美參議員呼吁SEC主席提供有關加密貨幣的監管清晰度

News.Bitcoin9月25日報道,美國參議院銀行、住房和城市事務委員會的高級成員、參議員PatToomey周五就加密貨幣監管致信美國證券交易委員會主席GaryGensler.

1900/1/1 0:00:00
KEX:BKEX Global 關于下架HODL/USDT交易對的公告

尊敬的用戶:? 本著保護用戶的宗旨,BKEXGlobal為保證交易幣種的高標準,將定期對平臺內的代幣進行綜合性審查;如項目方出現對投資者不利因素,我們將采取對應措施,并下架對應項目.

1900/1/1 0:00:00
KEX:BKEX Global 關于ETP專區新增GALA3L、GALA3S(Gala Games)的公告

尊敬的用戶: BKEXGlobalETP專區將于2021年9月30日15:00上線GALA3L、GALA3S.

1900/1/1 0:00:00
BNS:【活動】BNS充值&交易 瓜分$5,000美金大獎

尊敬的BitGlobal用戶:為慶祝BNS正式上線BitGlobal,我們將舉行“BNS充值&交易瓜分$5,000美金大獎”福利活動.

1900/1/1 0:00:00
NFT:NFT游戲Knight War完成200萬美元A輪融資,Momentum 6等參投

巴比特訊,9月25日,NFT游戲KnightWar完成200萬美元A輪融資,Momentum6、x21Digital、AU21、VBCVentures、AndromedaResearch、One.

1900/1/1 0:00:00
數字貨幣:新西蘭聯儲:數字貨幣將通過三種方式支持央行貨幣價值錨定角色

據智通財經9月30日消息,新西蘭聯儲正在探索發行數字貨幣的可能性,并表示其帶來的好處包括作為貨幣政策工具的潛在用途.

1900/1/1 0:00:00
ads