okx

比特币钱包的用途与Aave差点引发危机

时间:2023-08-11|浏览:220

注:今日,DeFi安全审计公司TrailofBits披露了Aave借贷协议此前存在的一个严重漏洞。在发现该问题后,Aave迅速修复了该漏洞。以下为TrailofBits发布的原文:

12月3日,知名DeFi借贷协议Aave部署了V2版本。尽管我们没有被雇佣来审查其代码,但在次日,我们还是对其进行了简单审查。很快,我们发现了一个影响AaveV1和V2版本合约的漏洞,并向Aave团队报告了该问题。在将我们的分析发送给Aave后的一个小时内,他们修复了该漏洞,避免了潜在的危机。如果该漏洞被利用,将破坏Aave,并影响外部DeFi合约中的资金。

据悉,有5家不同的安全公司审查了Aave代码库,其中一些使用了形式化验证。然而,这个漏洞未被这些公司发现。这篇文章描述了这个问题以及其他经验教训。此外,我们正在开发一种新的Slither检测器,可以识别这个漏洞,提高以太坊社区的安全性。

漏洞: Aave使用了delegatecall代理模式,我们在过去的文章中已经详细讨论过。每个组件被分成两个合约:(1)包含实现逻辑的合约,(2)包含数据并与逻辑合约交互的代理。用户与代理合约进行交互来执行逻辑合约上的代码。在Aave中,LendingPool(LendingPool.sol)是一个使用delegatecall代理的可升级组件。

发现的漏洞取决于合约中的两个功能: 1. 可以直接调用逻辑合约的函数,包括初始化函数; 2. 借贷池具有自己的delegatecall功能。

初始化可升级合约: 这种可升级模式的限制之一是,代理不能依赖逻辑合约的构造函数进行初始化。因此,状态变量和初始设置必须在公共初始化函数中执行。在LendingPool中,初始化函数设置了提供者地址(_addressesProvider)。通过initializer修饰器,禁止多次调用initialize函数。initializer要求满足以下条件: 1. 允许在相同交易中多次调用初始化(因此有多个initialize函数); 2. isConstructor是代理执行代码所需的; 3. revision>lastInitializedRevision时,允许在合约升级时再次调用初始化函数。

这样虽然对于代理而言是正常工作的,但也允许任何人直接在逻辑合约上调用initialize函数。一旦逻辑合约部署: 1. revision将为0x2(LendingPool.sol#L56); 2. lastInitializedRevision将为0x0; 漏洞是:任何人都可以在LendingPool逻辑合约中设置_addressesProvider。

任意delegatecall: LendingPool.liquidationCall直接委托调用了_addressesProvider返回的地址。这允许任何人启动LendingPool逻辑合约,设置受控地址提供者,并执行

热点:比特币 比特币钱 比特币钱包 比特币钱包的 特币 钱包

欧易

欧易(OKX)

用戶喜愛的交易所

币安

币安(Binance)

已有账号登陆后会弹出下载

« 上一条| 下一条 »
区块链交流群
数藏交流群

合作伙伴

非小号交易所排名-专业的交易行情资讯门户网站,提供区块链比特币行情查询、比特币价格、比特币钱包、比特币智能合约、比特币量化交易策略分析,狗狗币以太坊以太币玩客币雷达币波场环保币柚子币莱特币瑞波币公信宝等虚拟加密电子数字货币价格查询汇率换算,币看比特儿火币网币安网欧易虎符抹茶XMEX合约交易所APP,比特币挖矿金色财经巴比特范非小号资讯平台。
非小号行情 yonghaoka.cn 飞鸟用好卡 ©2020-2024版权所有 桂ICP备18005582号-1