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

AVE:Aave经历惊魂一刻 这个漏洞差点酿成一场危机

作者:

时间:1900/1/1 0:00:00

注:今日,DeFi安全审计公司TrailofBits披露了Aave借贷协议此前存在的一个严重漏洞,在发现到该问题后,Aave迅速修复了该漏洞,从而避免了一场危机。

原文来自TrailofBits:

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

据悉,有5家不同的安全公司审查了Aave代码库,其中有一些使用了形式化验证。然而,这个漏洞并没有被这些公司注意到。这篇文章描述了这一问题,以及“该漏洞是如何逃过检测”等其它的一些经验教训。此外,我们也在开发一种新的Slither检测器,它可以识别这一漏洞,从而为以太坊社区提高安全性。

漏洞

Aave使用了delegatecall代理模式,这一点我们在过去的文章中已经详细讨论过了。简单来看,每个组件被分成了两个合约:包含实现的逻辑合约,包含数据并使用delegatecall与逻辑合约进行交互的代理。在逻辑合约上执行代码时,用户与代理合约进行交互。这是delegatecall代理模式的简化表示:

Avalanche将于4月25日在主网激活Cortina升级,此前验证者需更新节点:4月19日消息,Ava Labs开发者关系工程师Usman Asim发推文称,提醒所有Avalanche验证者:Cortina AvalancheGo版本 (v1.10.0)现已推出,并将于北京时间4月25日23:00激活。验证者必须在此日期之前更新节点,否则它们将无法处理升级后的新块。Github信息显示,升级中的更改将于4月25日23:00在主网上生效。Cortina升级将迁移X-Chain以运行Snowman++共识,这意味着整个网络已经迁移到一个单一的共识引擎。Cortina升级还引入了批处理授权奖励并将C-Chain gas上限提高至1500 gas。

此前消息,Avalanche已于4月6日在Fuji测试网上激活Cortina升级。[2023/4/19 14:13:17]

在Aave中,LendingPool是使用delegatecall代理的可升级组件。

而我们发现的漏洞依赖于这些合约中的两个功能:

行业人士:由于很难再次申请牌照且用户信任受损,FTX重启困难重重:1月20日消息,针对FTX新任CEO考虑重启加密货币交易所一事,Binance Australia首席执行官Leigh Travers评论称,FTX将很难再次获得许可证,特别是在该行业进入新的一年,监管机构加强监管和监督的情况下。Travers还指出,自关闭以来,FTX用户已经迁移到“其他平台,比如Binance。他质疑这些用户是否会放心地回去。

澳大利亚律师事务所Gadens合伙人、数字资产律师Liam Hennessy认为,鉴于FTX的声誉受损和缺乏信任,任何客户或投资者“都很难再接近他们。Hennessy还对FTX是否会再次获得许可表示怀疑,称这将打上一个很大的问号,完全取决于司法管辖区。该律师认为,在一些离岸司法管辖区,交易所获得牌照审批会更容易,但如果用户不打算回归,那就毫无意义了。

与此同时,RMIT大学区块链创新中心的高级法律讲师Aaron Lane表示, FTX考虑恢复交易所业务“并不奇怪”,他指出这是第11章破产程序的目的,让公司能够提出一个计划来运营业务,并在法院批准的情况下“随着时间的推移”偿还债权人。[2023/1/20 11:23:08]

可以直接调用逻辑合约的函数,包括初始化函数;

币安将支持BEP20和BEP2网络升级和硬分叉,届时将暂停相关网络存提款:据官方公告,币安宣布将支持BNB SmartChain(BEP20)和BNB Beacon Chain(BEP2)的网络升级和硬分叉,BNB SmartChain Gibbs升级将发生在区块高度23.846,001处,时间预计在12月12日18:00(UTC+8)左右,币安将会在当日17:30开始暂停BNB SmartChain上存提款。

此外,BNB Beacon Chain升级将发生在区块高度284,376,000处,时间预计在12月14日15:00(UTC+8)左右,币安将会在当日14:30开始暂停BNB BeaconChain上存提款。[2022/12/9 21:33:35]

借贷池具有其自己的delegatecall功能;

初始化可升级合约

这种可升级模式的一个限制是,代理不能依赖逻辑合约的构造函数进行初始化。因此,状态变量和初始设置必须在公共初始化函数中执行。

在LendingPool中,初始化函数设置提供者地址:

跨链路由协议Multichain回应质疑,不存在超量增发的问题:9月22日消息,针对以太坊链上研究员bartek.eth对于DAI跨链超量增发的问题,Multichain官方发推否认并作出相应回应。

Multichain表示,Multichain有桥和路由器两个跨链路径支持DAI在以太坊,Fantom等8条链之间进行无缝转移,且桥和路由器之间可以共享流动性,这种创新的设计相比于传统桥大幅提高了流动性的资本效率。当用户通过路由的方式将Fantom DAI跨到其他链时,路由的流动性池在不同的链上的资产也将发生动态变化。同时,Fantom上的DAI 和其他链上的底层资产DAI是1:1对应的,不存在超量增发的问题。[2022/9/22 7:14:40]

initializer调节器防止多次调用initialize,它要求满足以下条件为true:

以下:

初始化允许在相同交易中多次调用调节器;

isConstructor是代理执行代码所需的;

派盾:SafeMoon暴跌系受其由V1向V2迁移的影响:6月17日消息,据派盾预警的推文,今日DeFi协议SafeMoon暴跌95%系受其由V1向V2迁移的影响。[2022/6/17 4:34:40]

revision>lastInitializedRevision?允许在合约升级时再次调用初始化函数;

虽然它通过代理,预期可正常工作,但是也允许任何人直接在逻辑合约上调用initialize函数。一旦逻辑合约被部署:

revision将为0x2(LendingPool.sol#L56);

lastInitializedRevision将为0x0;

而漏洞是:任何人都可以在LendingPool逻辑合约中设置_addressesProvider。

任意delegatecall

LendingPool.liquidationCall直接委托调用由_addressProvider返回的地址:

这允许任何人启动LendingPool逻辑合约,设置受控地址提供者,并执行任意代码,包括selfdestruct。

利用漏洞的场景:任何人都可以破坏借贷池逻辑合约。下面是一个简化的视觉表示:

缺乏存在检查

就问题本身而言,已经是很严重了,因为任何人都可以破坏逻辑合约,并阻止代理执行借贷池代码。

然而,在代理合约中使用OpenZeppelin会加剧这一问题的严重性。我们在2018年撰写的一篇博客文章中强调,没有代码的合约委托调用能在不执行任何代码的情况下返回成功。尽管我们最初发出警告,但OpenZeppelin并未在其代理合约中修复回退函数:

如果代理委托调用了一个已破坏的借贷池逻辑合约,则代理将返回成功,而不会执行任何代码。

由于Aave可以更新代理以指向另一个逻辑合约,因此这种漏洞利用不会持久。但在可利用此漏洞的时间范围内,任何调用该借贷池的第三方合约,都将表现为某些代码已被执行,但实际却并未执行。这将打破很多外部合约的基本逻辑。

受影响的合约

所有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)

修复及建议

幸运的是,在我们报告这个漏洞之前,还没有人利用它。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;

形式化验证合约并不是防弹的

Aave的代码库经过了形式化验证,区块链领域的一个趋势是,人们会认为安全特性是圣杯。用户可能会尝试根据这些特性的存在与否,对各种合约的安全性进行排序。我们认为这是危险的,它会导致错误的安全感。

Aave形式化验证报告列出了LendingPool视图函数以及池操作的属性。例如,已验证的属性之一是:

然而,如果逻辑合约遭到破坏,则该属性可能会被破坏。那如何才能对此进行验证?虽然我们无法访问定理证明或所使用的设置,但很可能证明proof没有考虑可升级性,或者prover不支持复杂的合约交互。

这在代码验证中是很常见的。你可以通过对整体行为的假设来证明目标组件中的行为,但是在多合约设置中证明属性是具有挑战性和耗时的,因此必须进行权衡。

形式化验证技术很棒,但是用户必须意识到它们覆盖范围很小,并且可能会错过攻击媒介。另一方面,自动化工具和人工审查可帮助开发人员以较少的资源来提升代码库的安全性。了解每种解决方案的优点和局限性,对开发人员和用户而言都至关重要。当前的问题就是一个很好的例子,Slither可以在几秒钟内发现这个问题,受过训练的专家可能会很快指出它,而要用安全特性来检测,则需要付出很大的精力。

总结

Aave做出了积极反应,并在发现问题后迅速修复了该漏洞。危机避免了,但最近遭受黑客攻击的其他受害者却没有那么幸运。在部署代码并将其暴露于对抗性环境之前,我们建议开发者:

查看这里的检查表和训练;

将Slither添加到你的持续集成管道中并调查其所有报告;

给安全公司适当的时间来审查你的系统;

请注意可升级性,至少请审查合约升级反模式,合约迁移的工作方式,以及使用OpenZeppelin的可升级性;

我们希望通过分享此信息以及与此问题相关的Slither检测器来防止类似的错误。

来源:金色财经

标签:AVEAAVEAINChainDnD Metaverseaave币挖矿教程blockchain钱包进不去prochain

DYDX热门资讯
比特币:比特币暴涨破历史新高 市值排全球13登微博热搜

点击上方"蓝字"关注作者哦~本文章介绍今天币圈整体行情以及币圈相关热门资讯为你筛选币圈最重要的信息话不多说直入主题吧~比特币暴涨币圈暴涨:24小时涨跌榜:再来看看今天币圈整体情况:24小时全网累.

1900/1/1 0:00:00
区块链:Gavin Wood:波卡要 “让区块链再次伟大”

在?12?月?3?日的首届波卡社区会议?Polkadot?Decoded?上,波卡创始人?Gavin?Wood?和主持人?Laura?Shin?进行了炉边谈话.

1900/1/1 0:00:00
UNI:财哥谈币:比特币剑指19900 三针探顶才能开启瀑布

本周到现在比特币还是继续保持窄幅震荡之态,整个币圈都处于处于整理期,马上年末收官,似乎在为今年最后一波行情准备.

1900/1/1 0:00:00
NAN:苏玺谈币:12.17早间行情分析及策略

  比特币昨日直接破高延续,盘中早间直接明确做多思路去跟多,而后晚间准备围绕双顶去布局空单,但双顶形成失败空单扫损离场后我们再次强掉,当前比特币依旧还是要做多,并且点位已经给的非常明确.

1900/1/1 0:00:00
SEI:陆百川12.17比特币早间行情分析及操作策略

多空皆可赚钱,唯有贪婪者例外,一切的交易,情绪起到关键性的作用,花全部的时间研究趋势,永远不要和趋势作对,学会跟随,才能学到精髓,错误并不可耻,可耻的是在错误的时候不懂得修正.

1900/1/1 0:00:00
BTC:BTC上涨打开空间 继续买买买

行情分析??BTC如期突破20000点的心里关口,突破后迎来意料之内的加速上行走势,BTC是越涨越安全的,当K线大幅拔高偏离5日均线之后,短期能续涨至少也能维持高位震荡.

1900/1/1 0:00:00