原文作者:Kelvin Fichter,以太坊开发者
6 月 9 日,Optimism 在社交媒体上公布,由于与加密货币做市商 Wintermute 合作过程中的沟通与技术失误,目前已有 2000 万枚 OP 被黑客控制。起初,由 Optimism 基金会向 Wintermute 发送 2000 万枚 OP 用于做市,而后 Wintermute 发现其提供的接收地址是 Layer1 地址,在 Wintermute 将其转向 Layer2 前,攻击者已抢先使用不同的初始化参数将其部署。截至目前,黑客已抛售约 100 万枚被盗 OP。
对此事件,以太坊开发者 Kelvin Fichter 解释了漏洞被攻击的原因,他表示,智能合约账户与EOA不同,普通EOA用户可以访问任意EVM链的账户,但智能合约账户不能。以下文字整理于Kelvin Fichter在社交媒体的发言。
需要说明,此事件不是 Optimism 或 Gnosis Safe 中任何漏洞的结果,而是源于在旧版本的 Gnosis Safe 中做出的(合理的)安全假设。
旧版本的 Gnosis Safe 工厂合约是通过没有链 ID(非 EIP-155 交易)的交易部署的。这意味着可以在以太坊以外的链上重置这些交易。在某些方面,这真的很有用。这意味着可以将同一工厂部署到每条链上同一地址上。正如现在工厂被部署到 Optimism。
不幸的是,在使用这个较旧的工厂合约时,Gnosis Safe UI 有时会使用 createProxy 函数,该函数通过 CREATE 而不是 CREATE2 创建多重签名。与 CREATE2 不同,通过 CREATE 创建的合约地址不是基于用于创建合约的代码,而仅基于创建者地址的 nonce。这意味着攻击者可以将旧的 Safe 工厂部署到 Optimism 并开始重新触发 createProxy 函数以在 L2 上创建多重签名。
但是,由于 createProxy 使用 CREATE 而不是 CREATE2,因此攻击者能够初始化这些多重签名,从而使它们归攻击者所有。
用户通常假设他们可以在以太坊上访问的任何帐户也可以在其他基于 EVM 的链上访问。对于EOA 账户(也称为非合约账户),这通常是正确的。但这不一定适用于智能合约账户。可以使用完全不同的代码在不同链上的相同地址创建合约,从而产生完全不同的所有者。
像这样的误解会在现实世界中产生严重的后果。上周,Wintermute 接受了 2000 万个 OP 代币的贷款,借给他们认为可以在 L2 上访问的 L1 多重签名钱包。这个 L2 地址是攻击者后来部署的多重签名之一。
这些是多链世界的成长之痛。很不幸,但它强调了为多链用户设计系统的重要性。CREATE2 和确定性部署至关重要,尤其是对于合约钱包。
如果你在以太坊上使用多重签名钱包,我强烈建议你花时间了解钱包的安全属性,以及你是否会在以太坊以外的链上控制该钱包。
欢迎加入律动 BlockBeats 官方社群:
Telegram 订阅群:https://t.me/theblockbeats
Telegram 交流群:https://t.me/BlockBeats_App
Twitter 官方账号:https://twitter.com/BlockBeatsAsia