木星链 木星链
Ctrl+D收藏木星链
首页 > TUSD > 正文

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

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

Shen ZhouUnion特邀嘉宾Anthony:构建基于实体商业的数字经济生态是化解当前市场窘境的最佳答案:据官方消息,2020年12月10日由神州交易所所举办的神州交易所“CNU公链上线发布会”杭州站正式启动。

作为此次会议的主题“CNU公链上线发布会”,Shen ZhouUnion特邀嘉宾Anthony表示,区块链4.0时代开创者,未来将会在Shenzhou Union底层交易所技术平台上实现普及性区块链去中心化商业落地应用,互联网文明和实体商业有机结合是数字经济的时代特色,充分发挥节点经济和数字经济双重定位,让实体商业与数字市场实现真正融合,构建基于实体商业的数字经济生态,通过技术、资金、资源等多元扶持,打造区块链项目新标杆,是化解当前市场窘境的最佳答案,也是Shenzhou Union的初衷所在。[2020/12/10 14:49:53]

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

声音 | Tuur Demeester:美联储向市场注入超1040亿美元,相当于比特币经损失调整后87%的市值:据华尔街日报报道,美国纽约联邦储蓄银行周四(10月17日)向金融市场注入了1041.5亿美元的临时流动资金。此次干预分为两个部分。其中一项是通过期限回购协议操作,该操作将持续15天,注入金额为306.5亿美元;另一项是通过为期一天的回购操作进行的,总额达735亿美元。对此,Adamant Capital创始合伙人Tuur Demeester评论称,美联储仅仅此次的量化宽松注入金额就达到了1040亿美元,这相当于比特币经过损失调整后87%的市值。[2019/10/19]

}

Openzepplin的实现漏洞分析

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

金色财经现场报道 :UUNIO CEO Connor Tack:去中心化社交改变收益模式:金色财经现场报道,在今天举办的2018金融科技上海峰会暨区块链世界论坛上,UUNIO 公司 CEO Connor Tack 做了题为“区块链技术重新定义社交网络经济”的演讲,他指出,数字内容市场在2019年将达到5亿美元的规模,但当前数字内容领域却面临着原创作者开发难、版权问题、以及内容供不应求的情况。现在的千禧一代,大家不太喜欢那种订阅模式,而喜欢每次进行小额支付。区块链社交媒体可以用更多的赞换来更多的收益、通过小额支付来售卖内容、零手续费的赞助、多中心化审查下的版权保护等改变。这样一来,每一个内容制造商都可以从每一次内容制造中获得收益,也会对自己的内容质量有很好的效果反馈。”[2018/4/19]

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

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

Message-callintothisaccountwithanalternativeaccounts'code,butpersistingthecurrentvaluesforsenderandvalue

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

标签:IONENTCALALLRafflectionCompound Basic Attention TokenMedicalchainMALL价格

TUSD热门资讯
FEX:AOFEX平臺幣OT(Option Token)第15期回購銷毀明細公示

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

1900/1/1 0:00:00
NFT:关于MARS(PROJECTMARS)暂时关闭充提的公告

尊敬WBF用户:????因钱包升级,MARS现将暂时关闭充提币,恢复时间以公告为准,给您造成的不便敬请谅解,如有疑问,请咨询WBF官方客服.

1900/1/1 0:00:00
USD:得州参议员Ted Cruz反对拜登提名Saule Omarova为OCC负责人

据Cointelegraph消息,9月28日,得克萨斯州共和党参议员TedCruz发推反对拜登提名SauleOmarova为OCC负责人.

1900/1/1 0:00:00
HID:Hideous.Finance (HIDEOUS)持仓返利上线BitMart

亲爱的BitMart用户:Hideous.Finance(HIDEOUS)将于香港时间2021年10月1日上线BitMart持仓返利平台.

1900/1/1 0:00:00
EGL:參與EGLD 交易,贏100,000美元大獎

活動時間:2021年09月29日上午8:00至2021年10月06日上午7:59點擊按鈕,立刻參與活動活動一:新用戶專屬福利:交易5EGLD,瓜分5,000美元大獎活動期間註冊的新用戶.

1900/1/1 0:00:00
INT:寻找下一个DeFi爆发点,链上数据还能带给我们什么洞察?

不断发展的区块链行业区块链技术是当今的一个热门话题,尤其是在2017年DeFi的出现,加密货币世界迎来爆发性增长,NFT等也成为了新的潮流.

1900/1/1 0:00:00