火星链 火星链
Ctrl+D收藏火星链
首页 > AVAX > 正文

ION:UUPSUpgradeable 漏洞分析

作者:

时间: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

Januar 选择 Tuum 作为核心银行服务提供商:金色财经报道,Januar 是加密企业和机构投资者进入新数字经济的合规门户,已选择 Tuum 作为核心银行平台,以实现其泛欧目标。Tuum 的银行核心将用于为加密公司建立账户和支付解决方案,以便他们像任何其他业务一样接收和发送付款。

Januar 是首批向加密企业和机构投资者提供法定加密轨道服务的支付机构之一。(finextra)[2022/6/10 4:15:36]

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

其中,openzeppelin通过回滚检测,来检查是否升级成功,避免了EIP-1822中遇到的问题:

Continuum Finance DApp即将上线:1月9日消息,波卡生态项目Continuum Finance宣布将于今日22:00正式开启其DApp。[2022/1/9 8:36:18]

function_upgradeToAndCallSecure(addressnewImplementation,bytesmemorydata,boolforceCall)internal{//第一步:设置newImpl地址到实现合约地址addressoldImplementation=_getImplementation();_setImplementation(newImplementation);//第二步:针对新的实现合约地址进行初始化if(data

//第三步:执行回滚检查//PerformrollbacktestifnotalreadyinprogressStorageSlot

}

Openzepplin的实现漏洞分析

前 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]

在上述的Openzeppelin的实现中,其通过回滚检测避免了EIP-1822中遇到的问题:即升级到一个不满足EIP-1822规范的合约时,此时代理合约和实现合约就完全被锁死,无法继续升级。但是其又引入了一个新的问题,即:回滚操作中事实上模拟了一遍新的实现合约地址中的upgradeTo操作,并且是通过delegatecall方式来进行调用。

FUU于8月25日13:13上线ZG.COM:据官方公告,ZG.COM将于2020年8月24日13:13开放FUU的充币和提币业务,将于8月25日13:13开启FUU/USDT交易对。

据悉,FUU是首款基于全球游戏娱乐行业为基础开发而构建的分布式智慧通证,其主要应用于全球娱乐行业的数字筹码流通、结算、应用以及翡翠金融业。FUU 是一个以庞大澳门实体产业链为核心依托、全开源分布式、致力于服务全球娱乐城、游戏等生态的价值通证。[2020/8/21]

通过delegatecall调用新合约地址的upgradeTo方法有什么问题呢?

查看黄皮书中关于delegatecall的定义为:

Message-callintothisaccountwithanalternativeaccounts'code,butpersistingthecurrentvaluesforsenderandvalue

thismeansthatthereceipientisinfactthesameaccountasatpersent,simplythatthecodeisoverwrittenandthecontextisalmostentirelyidentical

公告 | 火币全球站已于今日15:00上线UUU/USDT交易:据火币公告,因 UUU (U Network) 符合火币全球站USDT交易区的上线标准,火币全球站定于2019年8月5日15:00上线UUU/USDT交易。[2019/8/5]

从黄皮书的定义来看,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

标签:IONENTCALALLEncryption AIDGPaymentCalaxyWALLET

AVAX热门资讯
FTX:用冷钱包之后我能“隐身”吗?

1.用户:用冷钱包别人还能知道我有多少资产吗?答:可以。这与使用冷/热钱包无关。因为区块链中的交易信息等数据都是公开透明的,只要别人知道你的地址就可以在区块链资产查到你的所有信息.

1900/1/1 0:00:00
RAK:Kraken安全实验室:大量比特币ATM机未更改默认的管理二维码,易受黑客攻击

据Cointelegraph消息,9月29日,Kraken安全实验室发布博客文章表示,“大量”比特币ATM机很容易受到黑客攻击,因为管理员从未更改默认的管理二维码.

1900/1/1 0:00:00
APP:SOKE钱包:首个可以直连访问全球DApp钱包即将上线

据官方消息,SokeNetwork生态旗下钱包即将上线,自SokeNetworkDappV2.0上线以来用户激增。新版本中UI优化收到了公测用户的一致好评.

1900/1/1 0:00:00
GATE:关于关闭ZEC充提币的公告

尊敬的用户:因节点升级,WBF暂时关闭ZEC的充提币,给您带来的不便,敬请谅解。扫码加入WBF官方QQ群WBF风险提示:用户在进行充币前,建议仔细阅读该币充提页面的提示,以避免因为小于最小上账金.

1900/1/1 0:00:00
USDT:AOFEX平臺幣OT(Option Token)第15期回購銷毀明細公示

尊敬的用戶:AOFEX?交易所每月使用手續費盈利的20%,從二級市場中回購OT並銷毀。現將OT第15期回購銷毀明細公示如下:本期回購銷毀執行時間為:2021年9月30日17:00回購銷毀數量:1.

1900/1/1 0:00:00
BOOK:Facebook推出5000万美元的新基金,将用于帮助构建元宇宙

据TheVerge9月27日消息,Facebook宣布推出一只5000万美元的新基金,称这将帮助其更负责任地开发元宇宙.

1900/1/1 0:00:00