Ronin Bridge出现异常提取跨链资产行为根本原因是什么?

链得得发布于2024-08-07更新于2024-08-07

8月6日,据区块链安全审计公司Beosin Alert监测显示,Ronin Bridge项目出现异常提取跨链资产的行为。据Beosin安全团队分析,此次异常行为的根本原因在于项目方升级合约时,未正常初始化配置跨链交易确认所需的operator权重,导致合约中的minimumVoteWeight参数为零,从而使得任何人的签名都能通过跨链验证。

攻击交易链接:

https://etherscan.io/tx/0x2619570088683e6cc3a38d93c3d98899e5783864e15525d5f5810c11189ba6cb

Beosin目前正与项目方合作处理此次事件,本篇长文,我们也将与大家分析本笔交易存在异常的点在于两点:

首先,提取数量过高。在Ronin Bridge中,有跨链提取额度的限制,如果跨链提取的额度太大,则需要转至人工确认,而本次交易的跨链资产WETH的限制额度为4000。此笔交易提取了3996个。当然这不是漏洞,但足以让人引起了注意。

其次,查看这笔提取交易发现,其跨链验证者Operator只有一个,且对应的操作权重为0,那就可以确认这笔交易是存在问题的,因为在Ronin Bridge项目中,用户提取跨链资产需要得到多个Operator的签名,且累计的权重必须达到指定阈值。

事件分析:

分析链上合约和数据发现,合约Operator是对应的Manager合约独立管理,并且它是一个治理合约,专门用于管理ronin bridge,查看其交易记录,发现最近一笔交易是对Ronin Bridge合约进行升级,并且就在异常交易之前。所以漏洞的大致方面就基本明确,应该是项目方升级合约所导致的问题。

进一步深入,对比Ronin Bridge升级前后的代码发现,事件所使用的关键参数“_totalOperatorWeight”是本次升级新增的,并且需要在升级中调用initializeV3函数进行V3版本新增的“OperatorWeight”进行初始化。 

但遗憾的是:升级合约的交易中,并未调用initializeV3函数,而是错误调用initializeV4函数进行了V4版本的初始化。

 

至此,该事件的漏洞原理已经明了,Ronin Bridge项目方在合约升级时未正确对新增数据进行初始化,导致对应的关键数据“_totalOperatorWeight”始终为0,使得任意用户的提取请求都可以通过审核。

至本文发布前,项目方已经确认该问题,并发文说了本次攻击行为是白帽所为,并已进行退款,并未造成过多的损失。这是一个好消息,但是也暴露了合约升级这一大易出错的点。

可升级合约

可升级合约是一种solidity智能合约设计方案,使得已部署的合约能够在未来进行升级或修改,而无需完全重新部署。这个概念的核心在于将合约的逻辑和数据分离,并利用“delegatecall”实现对逻辑合约的调用。

尽管这种模式提供了灵活的升级能力,我们也必须高度重视其安全性。由于代理合约负责转发所有的用户请求,它实际上成为了合约系统的入口点。任何对代理合约的攻击都可能影响到整个合约的安全性。因此,在设计和部署可升级合约时,确保代理模式的安全性至关重要。目前代理模式的合约需要注意以下几点:

函数选择器冲突

在以太坊虚拟机(EVM)中,每个智能合约函数都有一个唯一的标识符,称为函数选择器。这个选择器是函数签名的前4个字节的哈希值。函数选择器用于确定合约中的具体函数,确保调用请求被正确路由到相应的函数实现。而在代理模式在调用函数时,会先检查代理合约中的函数接口是否能匹配调用函数,如果不能匹配,才会利用fallback中的delegatecall调用逻辑合约。

因此,如果代理合约和逻辑合约中存在函数选择器相同的函数,当代理合约接收到调用时,它直接调用代理合约中的函数,而不是逻辑合约,这可能导致预期之外的行为或安全漏洞。

存储冲突

在以太坊虚拟机(EVM)中,合约的状态数据存储在特定的存储槽中,每个存储槽的地址由其索引(从0开始)确定。合约中的每个状态变量都对应一个存储槽,数据在这些槽中持久化。

在代理模式中,存储槽通常是由代理合约管理的,而逻辑合约则通过代理合约来访问这些槽。存储冲突可能发生在逻辑合约中新增的状态变量与代理合约中现有的状态变量槽发生冲突时。这可能导致代理合约中的数据被覆盖或不一致

合约初始化问题

在代理模式中,由于代理合约和逻辑合约的分离,而每次升级可能都涉及到变量的更改和新增,因此在升级时必须确保在正确设置这些关键变量。本次的ronin bridge事件就是因为这个问题没做好,导致被攻击。

此外,需要确保初始化函数 initialize 只能被调用一次,以防止在初始化后被恶意攻击者重复调用,从而修改关键变量。

ldelegatecall调用机制

delegatecall是一种低级调用机制,它允许一个合约在其上下文中执行另一个合约的代码。这意味着,调用合约的存储、地址和消息发送者保持不变,但执行的逻辑来自被调用的目标合约。虽 delegatecall提供了强大的功能,但也需要谨慎使用。

如果目标合约地址不存在,delegatecall 的执行将失败并返回失败码,但这种失败可能不会被立刻发现。结果,代理合约中的调用可能看起来像是成功,但实际操作并未生效,从而导致系统的不一致或错误。

代理合约权限管理

在代理模式中,权限管理是另一个关键的安全问题。代理模式通过分离代理合约和逻辑合约的职责,使得合约可以在不改变数据存储的情况下进行升级,但同时也引入了复杂的权限管理问题。正确地管理权限对于保证合约系统的安全性和稳定性至关重要。

Beosin作为全球最早一批从事形式化验证的区块链安全公司,主打”安全+合规“全生态业务,在全球10多个国家和地区设立了分部,业务涵盖项目上线前的代码安全审计、项目运行时的安全风险监控与阻断、被盗追回、虚拟资产反洗钱(AML)以及符合各地监管要求的合规评估等“一站式”区块链合规产品+安全服务

链得得仅提供相关信息展示,不构成任何投资建议

热门币种推荐

你可能也喜欢

特朗普媒体公布2.38亿美元亏损,并重新审视其比特币策略

特朗普媒体科技集团在二季度净亏损2.38亿美元后,正重新审视其数字货币储备策略。亏损中约1.904亿美元源于数字资产及相关证券的未实现损失。该公司计划调整储备结构,以保持长期数字资产敞口的同时,降低价格波动影响并提高资产负债表效率。 该公司运营Truth Social等平台,与特朗普关系密切。报告显示,公司已使用期权管理比特币波动并赚取溢价,并将部分比特币投入借贷等收益方案。同时,公司将分配更多资源给核心媒体业务。 截至6月底,公司持有约9477枚比特币。7月份,公司出售了价值约1.596亿美元的比特币相关证券,并用以增持比特币。至7月31日,其储备(包括已质押部分)已增至约14139枚比特币。 公司警告,从比特币赚取额外收益的策略伴随交易对手信用风险及资产损失可能性。部分合作方缺乏大型评级机构评级,可能在市场低迷时违约。若交易无担保,公司可能无法收回比特币。此外,在资产用于收益方案期间,公司的处置权受限。 分析指出,这并非公司首次因比特币投资亏损,显示其模式存在结构性弱点。从单纯持有转向收益策略,在资产波动性之上增加了交易对手风险。其他公司也曾经历类似路径,并在2022年因交易对手违约而受冲击。当前情况呈现一个悖论:公司在增持储备的同时承认使用风险。未来是坚持收益策略还是回归保守持有,有待后续财报揭示。

cryptonews.ru31分钟前

特朗普媒体公布2.38亿美元亏损,并重新审视其比特币策略

cryptonews.ru31分钟前

720次攻击0成功,Claude Code默认放权,AI替你点“同意”

Claude Code将于8月14日起,在Pro、Max和Team计划的新会话中,默认启用“Auto Mode”。该模式下,AI将自动审批有风险的行动,不再频繁弹窗请求用户确认。 此举的底气来自一项第三方安全测试:针对72种攻击场景的720次尝试,Claude的三款主力模型全部成功防御,攻击成功率降至0。内部数据显示,Auto Mode能拦截89%的危险命令,效率是人类用户(仅拦截13.6%)的6.5倍,并能有效避免因“弹窗疲劳”导致的人类判断力下降。 其安全架构依赖三层防御叠加: 1. **模型对齐**:训练模型区分用户指令与外部内容中的潜在恶意指令。 2. **输入探针**:在AI读取外部内容(网页、文件)前进行检测,标记可疑的提示注入尝试。 3. **动作分类器**:在AI执行动作前,由另一模型审核该操作是否获得用户真实授权、是否具有破坏性或数据泄露风险。 尽管测试数据亮眼,但行业专家指出,0/720的结果不等于绝对安全。该测试由Anthropic委托进行,且攻击场景针对旧模型优化,可能存在未覆盖的盲区。其他研究团队的压力测试曾发现,对于某些不经过动作分类器的操作(如项目内文件改动或第三方软件包指令),漏判率可能很高。 本质而言,默认开启Auto Mode是一次“风险交换”:用AI分类器替代人类进行高频、琐碎的审批,提升了效率和平均安全性,但同时也将具体的判断权从用户移交给了AI系统。用户节省了点击,但也让渡了部分控制。最终,责任的承担者仍然是用户本人。

marsbit52分钟前

720次攻击0成功,Claude Code默认放权,AI替你点“同意”

marsbit52分钟前

交易

现货

热门文章

如何购买RONIN

欢迎来到HTX.com!我们已经让购买Ronin(RONIN)变得简单而便捷。跟随我们的逐步指南,放心开始您的加密货币之旅。第一步:创建您的HTX账户使用您的电子邮件、手机号码注册一个免费账户在HTX上。体验无忧的注册过程并解锁所有平台功能。立即注册第二步:前往买币页面,选择您的支付方式信用卡/借记卡购买:使用您的Visa或Mastercard即时购买Ronin(RONIN)。余额购买:使用您HTX账户余额中的资金进行无缝交易。第三方购买:探索诸如Google Pay或Apple Pay等流行支付方法以增加便利性。C2C购买:在HTX平台上直接与其他用户交易。HTX场外交易台(OTC)购买:为大量交易者提供个性化服务和竞争性汇率。第三步:存储您的Ronin(RONIN)购买完您的Ronin(RONIN)后,将其存储在您的HTX账户钱包中。您也可以通过区块链转账将其发送到其他地方或者用于交易其他加密货币。第四步:交易Ronin(RONIN)在HTX的现货市场轻松交易Ronin(RONIN)。访问您的账户,选择您的交易对,执行您的交易,并实时监控。HTX为初学者和经验丰富的交易者提供了友好的用户体验。

488人学过发布于 2024.04.30更新于 2026.06.02

如何购买RONIN

相关讨论

欢迎来到HTX社区。在这里,您可以了解最新的平台发展动态并获得专业的市场意见。以下是用户对RONIN(RONIN)币价的意见。

活动图片