注:今日,DeFi安全审计公司TrailofBits披露了Aave借贷协议此前存在的一个严重漏洞,在发现到该问题后,Aave迅速修复了该漏洞,从而避免了一场危机。
原文来自TrailofBits:
12月3日,知名DeFi借贷协议Aave部署了V2版本,尽管我们并没有被雇佣来查看其代码,但在次日,我们还是对其进行了简单审查。很快,我们就发现了一个影响AaveV1和V2版本合约的漏洞,并报告了该问题。在将我们的分析发送给Aave的一小时内,他们的团队修复了该漏洞,以减轻潜在影响。如果该漏洞被利用,这一问题将破坏Aave,并影响外部DeFi合约中的资金。
据悉,有5家不同的安全公司审查了Aave代码库,其中有一些使用了形式化验证。然而,这个漏洞并没有被这些公司注意到。这篇文章描述了这一问题,以及“该漏洞是如何逃过检测”等其它的一些经验教训。此外,我们也在开发一种新的Slither检测器,它可以识别这一漏洞,从而为以太坊社区提高安全性。
漏洞
Aave使用了delegatecall代理模式,这一点我们在过去的文章中已经详细讨论过了。简单来看,每个组件被分成了两个合约:包含实现的逻辑合约,包含数据并使用delegatecall与逻辑合约进行交互的代理。在逻辑合约上执行代码时,用户与代理合约进行交互。这是delegatecall代理模式的简化表示:
CMC报告:币安公开的准备金存量为570亿美元:7月11日消息,CoinMarketCap公布的2023 H1交易平台数据报告显示,币安公开的准备金存量为570亿美元,居所有加密交易平台首位。其中比特币和稳定币构成了币安储备资产的主要部分。
同时,虽然近3个月市场的恐慌情绪(FUD)导致资金从币安流出,但值得注意的一个十分积极的迹象是,尽管在2023年第二季度币安交易所出现大量资金外流,但该交易所仍保留了健康数量的准备金证明资产,并安全存放着多样化的货币。除此之外,币安在2023上半年加密市场的交易量、市场份额等方面均处于首位。[2023/7/11 10:48:40]
在Aave中,LendingPool是使用delegatecall代理的可升级组件。
而我们发现的漏洞依赖于这些合约中的两个功能:
可以直接调用逻辑合约的函数,包括初始化函数;
借贷池具有其自己的delegatecall功能;
1
初始化可升级合约
这种可升级模式的一个限制是,代理不能依赖逻辑合约的构造函数进行初始化。因此,状态变量和初始设置必须在公共初始化函数中执行。
ARK Invest再次购买500万美元的Coinbase股票:金色财经报道,Cathie Wood的ARK Invest购买Coinbase价值500万美元的股票。这是该投资基金最近第四次买入,该公司的ARK Fintech Innovation在其资产负债表上增加了15.8万股。Wood最近一次收购是在去年12月中旬,当时该公司在资产负债表上增加了320万美元的交易所股票。Coinbase股价周四在纽约收于34.78美元,上涨约7%。[2022/12/30 22:16:16]
在LendingPool中,初始化函数设置提供者地址:
initializer调节器防止多次调用initialize,它要求满足以下条件为true:
以下:
初始化允许在相同交易中多次调用调节器;
isConstructor是代理执行代码所需的;
revision>lastInitializedRevision允许在合约升级时再次调用初始化函数;
虽然它通过代理,预期可正常工作,但是也允许任何人直接在逻辑合约上调用initialize函数。一旦逻辑合约被部署:
彭博社:Coinbase招聘新员工以增强欧洲业务:金色财经报道,加密货币交易所Coinbase正在通过一系列招聘新员工和晋升来巩固其欧洲高级职位。
此前,CoinbaseCoinbase的股价跌至历史最低点,新员工就来了。11月初,Coinbase表示,该公司将解雇60多名员工。其首席产品官Surojit Chatterjee也将在重组后于本月底辞职。(彭博社)[2022/11/28 21:07:35]
revision将为0x2(LendingPool.sol#L56);
lastInitializedRevision将为0x0;
而漏洞是:任何人都可以在LendingPool逻辑合约中设置_addressesProvider。
2
任意delegatecall
LendingPool.liquidationCall直接委托调用由_addressProvider返回的地址:
这允许任何人启动LendingPool逻辑合约,设置受控地址提供者,并执行任意代码,包括selfdestruct。
加密交易平台BitGoldEx完成A轮战略融资:金色财经报道,加密交易平台BitGoldEx宣布完成A轮战略融资,投资方为BAIF Group,该平台将利用这笔新融资扩大业务范围和市场推广,增加自主合约交易产品,并对未来千亿规模的Web 3.0市场进行战略布局。据悉,目前BitGoldEX已在英国、美国、新加坡、日本、伊朗、伊拉克、土耳其等29个国家和地区获得金融服务牌照。(digitaljournal)[2022/10/23 16:36:08]
利用漏洞的场景:任何人都可以破坏借贷池逻辑合约。下面是一个简化的视觉表示:
3
缺乏存在检查
就问题本身而言,已经是很严重了,因为任何人都可以破坏逻辑合约,并阻止代理执行借贷池代码。
然而,在代理合约中使用OpenZeppelin会加剧这一问题的严重性。
我们在2018年撰写的一篇博客文章中强调,没有代码的合约委托调用能在不执行任何代码的情况下返回成功。尽管我们最初发出警告,但OpenZeppelin并未在其代理合约中修复回退函数:
Cardano核心开发人员:一个Bug导致测试网严重崩溃:8月19日消息,据Cardano核心开发人员Adam Dean在社交媒体披露,由于最近发现的一个Bug,导致Cardano区块链测试网被灾难性破坏。Adam声称,即将到来的Vasil硬分叉1.35.2版本内包含一个严重错误,该漏洞因为质押池运营商急于在主网升级时被发现。尽管该漏洞现在被发现,但大部分SPO已经将阶段升级到了1.35.2版本,而本周早些时候推出的1.35.3版本目前还无法进行区块链同步,现在只能在两个没有任何区块历史的新测试网上进行测试。
Adam Dean表示其已经敦促Input Output首席执行官Charles Hoskinson部署灾难恢复计划所需的工具,到目前为止,大约14%的SPO已升级到节点版本1.35.3,远低于要求的75%阈值,本周三Charles Hoskinson曾在社交媒体呼吁SPO尽快将节点升级到最新版本,但当时不少用户认为不要为了和以太坊竞争而急于升级。[2022/8/19 12:35:15]
如果代理委托调用了一个已破坏的借贷池逻辑合约,则代理将返回成功,而不会执行任何代码。
由于Aave可以更新代理以指向另一个逻辑合约,因此这种漏洞利用不会持久。但在可利用此漏洞的时间范围内,任何调用该借贷池的第三方合约,都将表现为某些代码已被执行,但实际却并未执行。这将打破很多外部合约的基本逻辑。
4
受影响的合约
所有AToken:AToken.redeem调用pool.redeemUnderlying(AToken.sol#L255-L260)。由于调用什么也不做,用户将烧掉他们的AToken,而不会收到他们的底层资产;
WETHGateway(WETHGateway.sol#L103-L111):存款会存储在网关中,然后任何人都可以窃取存款资产;
任何基于Aave信用委托v2的代码库(MyV2CreditDelegation.sol);
如果我们发现的问题被利用,则Aave之外的很多合约都会受到各种方式的影响。确定一份完整的名单是困难的,我们没有试图这样做。这一事件凸显了DeFi可组合性的潜在风险,以下是我们找到的一些受影响的合约:
DefiSaverv1(AaveSaverProxy.sol)
DefiSaverv2(AaveSaverProxyV2.sol)
PieDao–pieoven(InterestingRecipe.sol#L66)
5
修复及建议
幸运的是,在我们报告这个漏洞之前,还没有人利用它。Aave对其两个版本的借贷池调用了initialize函数,从而保证了合约的安全:
LendingPoolV1:0x017788dded30fdd859d295b90d4e41a19393f423?修复时间:2020年12月4日07:34:26PM+UTC
LendingPoolV2:0x987115c38fd9fd2aa2c6f1718451d167c13a3186?修复时间:2020年12月4日07:53:00PM+UTC
长期而言,合约部署者应:
在所有逻辑合约中添加一个构造函数以使initialize函数无效;
检查delegatecall代理fallback函数中是否存在合约;
仔细检查delegatecall陷阱,并使用slither-check-upgradeability;
6
形式化验证合约并不是防弹的
Aave的代码库经过了形式化验证,区块链领域的一个趋势是,人们会认为安全特性是圣杯。用户可能会尝试根据这些特性的存在与否,对各种合约的安全性进行排序。我们认为这是危险的,它会导致错误的安全感。
Aave形式化验证报告列出了LendingPool视图函数以及池操作的属性。例如,已验证的属性之一是:
然而,如果逻辑合约遭到破坏,则该属性可能会被破坏。那如何才能对此进行验证?虽然我们无法访问定理证明或所使用的设置,但很可能证明proof没有考虑可升级性,或者prover不支持复杂的合约交互。
这在代码验证中是很常见的。你可以通过对整体行为的假设来证明目标组件中的行为,但是在多合约设置中证明属性是具有挑战性和耗时的,因此必须进行权衡。
形式化验证技术很棒,但是用户必须意识到它们覆盖范围很小,并且可能会错过攻击媒介。另一方面,自动化工具和人工审查可帮助开发人员以较少的资源来提升代码库的安全性。了解每种解决方案的优点和局限性,对开发人员和用户而言都至关重要。当前的问题就是一个很好的例子,Slither可以在几秒钟内发现这个问题,受过训练的专家可能会很快指出它,而要用安全特性来检测,则需要付出很大的精力。
总结
Aave做出了积极反应,并在发现问题后迅速修复了该漏洞。危机避免了,但最近遭受黑客攻击的其他受害者却没有那么幸运。在部署代码并将其暴露于对抗性环境之前,我们建议开发者:
查看这里的检查表和训练;
将Slither添加到你的持续集成管道中并调查其所有报告;
给安全公司适当的时间来审查你的系统;
请注意可升级性,至少请审查合约升级反模式,合约迁移的工作方式,以及使用OpenZeppelin的可升级性;
我们希望通过分享此信息以及与此问题相关的Slither检测器来防止类似的错误。
10月,“巴比特DeFi投资实战班”首次在深圳开班,全国近50位学员前往学习。接下来,12月北京、1月杭州,我们相约defi线下课,报名正式启动!
标签:AVEAAVEINGGATave币圈行情AavegotchiRINGER Vault (NFTX)BITGATTI
比特币在2.2万美元上方坚挺,还可以恢复涨势吗?虽然昨天让所有人都感到震惊。它不仅领先的加密技术在过去24小时内突破了2万美元的心理关口,而且还接连突破了2.1万美元、2.2万美元和2.3万美元.
1900/1/1 0:00:00????前言:领导人不学习,不加强修养,不仅缺心,而且缺德,最笨的人就是出色的完成了根本不需要干的事,最愚蠢的人,就是用他的聪明才智努力犯错误的人,最缺德的人.
1900/1/1 0:00:00行情分析: 比特币在经过维持了三天的高位盘整之后,日内白盘价格位于在19200-19500此区间内来回震荡,直到午后六点钟左右,币价一路拉升至19500上方,多头持续放量并且突破历史新高.
1900/1/1 0:00:00“心香集”之大乘语录:至尊大觉窝阿底峡莅临卫地时,三大弟子库、奥、仲请问道:“尊者,能令补特伽罗获得解脱乃至一切智,经论典藉与上师的教言,哪一个更重要?”尊者说:“比较起经典.
1900/1/1 0:00:00点击上方“蓝色字”可关注我们!暴走时评:迫于监督合规性的负担,爱沙尼亚已经在2020年撤销了1000多家加密货币公司的许可证。目前仍有约400家虚拟货币服务提供商在爱沙尼亚持有许可.
1900/1/1 0:00:00交易本身就是风险投资,无论何时何地,都要控制好交易的风险,当你重仓时,你的仓位根本无法承担行情的波动,如果满仓,那就更不用说了.
1900/1/1 0:00:00