ION:UUPSUpgradeable 漏洞分析_CAL

本文作者: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

印度财政部发布关于1%源头税收减免的指导方针,将于7月1日生效:6月23日消息,印度财政部已发布关于1%源头税收减免(TDS)的指导方针,该指导方针将于7月1日生效。关于TDS,印度政府表示,加密货币资产交易必须在交易发生当月月底起30天内报告,扣除的金额必须在同一期限内支付给政府。报告交易的格式也由政府规定,对此政府将推出26QE表格。新规定还规定,纳税扣除者在向政府申报时,必须在15天内向收款人颁发TDS证书。如果数字资产的转让是以实物支付的,则必须提前缴纳该税。双方还必须保留虚拟数字资产的转让日期、对价和对价方式等细节。

据悉,TDS是对代表卖家在其平台上缴税的交易所施加的责任。它将按交易价值的1%计算。卖方将能够从其30%的总纳税义务中抵消1%的TDS。TDS是近年来印度引入的最具争议的加密货币税法之一,此次指导方针的发布为TDS提供了明确性。(CoinDesk)[2022/6/23 1:26:22]

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

公告 | 参议院银行委员会关于Libra的听证会已结束:美国参议院银行、住房和城市事务委员会关于Facebook加密货币项目Libra的听证会现已结束。查看详细内容请点击原文链接。[2019/7/17]

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

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

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

Bitstar关于ETF分叉处理公告:Bitstar关于ETF分叉处理公告。尊敬的用户:

根据Twitter“ETF基金会”官方公布的消息,2017年12月14日18:36(格林威治时间+8),“ETF分叉点已发生4730660区块高度”。每个ETH持有者将以1:1的比例获得ETF。在这里值得一提的是,ETF团队原本预计2018年1月1日的分叉点将发生在4830000区块高度。但是突然发布的消息17年12月14日16点21分,这表明分叉将提前在4730999区块高度进行。此外,最终叉子发生在17年12月14日18:36,区块高度为4730660。

我们不理解团队频繁更换分叉计划的方式,而无需向用户和市场进行任何预先通知。如果将来发生类似事件,我们不承诺无疑会接受BitStar的货币交付。

在对BitStar用户负责任的态度下,我们仍然会根据资产快照在这个高度下向比赛的用户提供比例ETF 4730999。我们已经考虑过BitStar用户对339个区块的差异值会有轻微的影响。[2017/12/15]

}

声音 | Kyber Network CEO Loi Luu:去中心化流动性的必要性:金色财经现场报道,6月29日在2019以太坊技术及应用大会上,Kyber Network CEO Loi Luu指出,去中心化流动性的含义包含两点,其一,在去中心化的生态系统中,流动性由无需信任,透明及可验证的速度所支持。其二,由DApp使用,智能合约可进入。中心化流动性不安全也不透明,DApp需要去中心化流动性,从技术上来说,Dapps与中心化的应用交流较难。[2019/6/29]

Openzepplin的实现漏洞分析

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

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

声音 | 数字货币经济学家Tuur Demeester:矿工不会创造和控制币价:数字货币经济学家Tuur Demeester在推特上表示,不同意所谓比特币矿工根据盈亏平衡成本制造比特币价格下限一说。前几日和数据供应商的交谈中得知,矿工每开采一枚比特币的电费成本在2000美元以上,矿工遵循市场价,不创造和控制价格。[2018/11/19]

查看黄皮书中关于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

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

区块博客

[0:0ms0-3:168ms