自选
我的自选
查看全部
市值 价格 24h%
  • 全部
  • 产业
  • Web 3.0
  • DAO
  • DeFi
  • 符文
  • 空投再质押
  • 以太坊
  • Meme
  • 比特币L2
  • 以太坊L2
  • 研报
  • 头条
  • 投资

免责声明:内容不构成买卖依据,投资有风险,入市需谨慎!

检查你的 Safe Wallet 模块:一个无需签名的模块如何转移了770万美元

2026-09-16 12:01:45
收藏

2026年9月15日以太坊钱包安全事件深度解析:Safe模块漏洞与防御指南

2026年9月15日,一个以太坊钱包在无需任何所有者签名的情况下,丢失了约2,882个rsETH。该钱包是一个Safe多签钱包,这种设计通常被认为非常安全,因为需要多个密钥共同签名才能执行操作。然而,余额 nonetheless 被清空,这是通过用户自己启用的一个模块完成的。如果你使用智能合约钱包,此案例后的任务既简单又具体:检查你的钱包中启用了哪些模块,并移除那些你不再需要或无法解释其用途的内容。

本文将解释模块在技术上允许做什么,9月15日的攻击是如何展开的,以及如何自己在几分钟内进行检查。浏览界面不收取任何费用。只有移除模块才是一笔交易,这需要常规数量的签名。

Safe模块详解:智能合约钱包中模块的功能边界

Safe模块是一个独立的智能合约,钱包永久授权它代表自己执行交易,而无需汇聚通常所需的所有者签名数量。

这并非设计缺陷,而是设计初衷。任何希望运行自动工资发放、定期再平衡流程或流动性策略的人,都不能让三个人对每一步都进行签字确认。因此,钱包将该部分权限委托给一个合约。

从技术角度来看,这是通过 execTransactionFromModule 函数或其带有返回值的变体运行的。已启用的模块调用该函数,钱包执行模块指示的任何操作。在此过程中并未绕过签名阈值;只是在这条路径上未提供签名要求。Safe文档以非同寻常的清晰度说明了后果:模块可以执行任意交易,仅应添加经过审计和信任的模块,恶意模块可以完全接管钱包。这一点在官方Safe关于智能账户模块的文档中有明确说明。

两个特性使模块对攻击者具有吸引力。首先,它们是永久性的:一旦激活,模块将保持活动状态,直到有人显式关闭它。其次,它们在日常生活中是不可见的。你在发送、接收或查看余额时看不到它们。只有在专门查找时才会显示出来。

9月15日攻击详解:DELEGATECALL如何释放2,882个rsETH

资金流出发生在区块25980525,UTC时间04:38:47。它击中了一个持有Kelp DAO液态质押代币rsETH杠杆头寸的单Safe钱包。安全公司Blockaid和PeckShield率先报告了这一事件;他们的损失数据略有不同,介于773万美元至781万美元之间。数量比美元数字更精确:2,882.37个rsETH。

问题出在一个用于Uniswap v4流动性策略的定制模块上。该模块提供了一个入口点,未经检查地将调用者提供的数据直接传递给钱包函数 execTransactionFromModuleReturnData,操作标志为1。标志1代表DELEGATECALL,这是决定性的一点。

一句话解释DELEGATECALL: DELEGATECALL在你的合约存储和身份下执行外部程序代码,仿佛钱包自己编写了这些代码。能够触发此调用的人不是在向钱包发出指令,而是作为钱包在行动。

由于该模块的入口点没有针对外部调用者的访问控制,任何地址都可以访问它。而且因为模块已经在钱包中启用,钱包不再进行其他检查。所有者列表和签名阈值在此序列中不再起作用。

Uniswap v4钩子与Keeper多调用的攻击路径逐步解析

链条经历了几个阶段,并使用了 throughout 设计为方便功能的函数。攻击者首先调用了一个公开可用的Keeper多调用函数。Keeper是保持策略运行的服务,例如通过调整头寸;它们的调用通常是故意开放的,以便任何人都可以触发它们,确保策略不会停滞。

通过这个调用,攻击者将钱包的流动性模块引导至他自己控制的Uniswap v4池。Uniswap v4允许所谓的钩子(hooks),即在池中的特定事件发生时自动运行的自定义代码。该池中的钩子属于攻击者。

最后一步是解包。钱包持有的不是裸rsETH,而是aEthrsETH,即贷款市场Aave计息包装内的rsETH。在这种形式下,它不能简单地被转走。钩子将持仓解包为可自由转移的rsETH,从而使余额变得可移动。

模块在有人关闭之前一直有效。这正是值得查看已启用合约列表的原因。

MEV机器人而非攻击者:“yoink”如何获取资金

攻击者将其交易发送到公共内存池(未确认交易的等待区),任何人都可以检查。一个名为“yoink”的MEV机器人正在阅读那里,重建了相同的序列并在同一区块内抢先完成。2,882.37个rsETH落入属于机器人的地址,在其执行时的估值约为780万美元。

对于被盗的钱包来说,这没有任何改变。对你来说,这改变了两点。首先,此案表明,模块中的开放弱点不仅涉及发现它的攻击者:一旦序列公开可见,任何速度足够快的人都可以重建它。其次,它解释了为什么这里的恢复前景不同于经典盗窃。Kelp DAO在UTC时间06:03暂停了接收地址24小时,并同时声明其自身合同未受影响,且rsETH仍有全额支持。问题在于单个钱包的定制模块,而不是代币或协议本身。

并非首例:2026年5月25日SquidRouterModule利用漏洞

任何人将9月的事件视为孤立事件,都低估了模式。2026年5月25日,一场攻击击中了名为SquidRouterModule的模块。根据报道该事件的媒体,至少有86个以太坊和Base上的Safe钱包受到影响;根据分析,损失估计为320万美元,或在另一种计数中,超过300笔交易的损失接近400万美元。整个过程持续了大约两个小时。

攻击路线不同,结果相同。攻击者没有使用DELEGATECALL入口,而是使用函数 executeSameChainActions() 并冒充授权代理。由于模块在受影响的钱包中已经拥有广泛的权限,钱包合约将这些伪造的指令视为真实。提供商Squid公开表示,被利用的合同仅与其自身产品架构共享名称,与之无关,并且其自身用户和集成商未受影响。

从这两个案例中可以得出相同的教训。今天多签的最弱点很少是签名阈值。它位于钱包在某时允许绕过该阈值的合同中。在选择托管解决方案时,这是一个几乎不出现在任何产品描述中的标准;我们的硬件钱包比较设备排名基于你对签名真正保留的控制程度。

检查Safe模块:如何在五分钟内查看已启用的内容

检查本身并不引人注目,而这正是它经常被忽略的原因。有两条路线,它们回答同一个问题。

通过界面:设置和模块列表

在Safe界面中打开钱包,进入设置中的Modules条目。它列出了为此钱包启用的合约地址。对于大多数私人钱包来说,那里什么都没有,这是好的情况。如果列出了某些内容,请逐一检查每个地址,并回答三个问题:你还记得你为此模块启用了什么吗?你今天仍在使用相关应用程序吗?你能找到该地址的可追溯提供商,包括审计报告吗?

如果这三个问题中任何一个悬而未决,该模块就应列入移除列表。举证责任在于保留方。目的不明的模块无论你是否能命名其用途,都会继续工作。

通过合约:getModules 和 isModuleEnabled

任何人想要独立于接口了解情况,可以直接询问钱包合约。只读函数 getModules 返回所有启用模块的地址,isModuleEnabled 针对单个地址回答是否启用的是与否。这两个调用都是纯只读调用:不收取费用,不需要签名,可以通过任何区块浏览器或SDK运行。

合约路线有一个实际优势。它显示链的状态,而不是应用程序的渲染。如果界面因任何原因未能显示模块,它仍将在此列出。

四项保障措施中有三项成立:对于模块而言,一个开放点就足够了,因为每个模块都被允许自行行动。

移除模块:为何disableModule需要你的签名阈值

关闭操作通过钱包函数 disableModule 运行。与查看不同,这是一笔真正的交易。它产生网络费用,并需要来自所有者的常规数量签名。在Safe界面中,你可以在刚才阅读的同一模块列表中启动过程;所有者随后像对待任何其他交易一样确认。

一个值得知道的怪癖是:模块在合约中存储为链表,因此关闭也需要前一个条目的地址。界面和SDK会自动插入此值。任何手动构建交易的人都必须确定它,否则调用将失败。

选择在网络费用较低的时刻安排移除,并在一次会话中处理多个模块。这不适用于普通检查:它免费且可以立即发生。

Token授权与模块:两种权限,两个单独的检查

这里经常产生混淆,可能导致昂贵的错误。Token授权(在合约术语中为approve)允许外部合约从你的地址扣除一定数量的特定代币。相比之下,模块允许外部合约在你的钱包内部行动,并跨越你所有的持仓进行操作。

影响范围的区别很大,因此没有一个检查可以替代另一个。即使干净地撤销了授权的人,仍然可能启用了具有完全访问权限的模块。如何清除授权以及当前燃气价格下的撤销成本在我们的以太坊Token授权指南中有描述。对于模块,上一部分的检查额外适用。

顺便说一下,这两个检查仅涉及你自己管理的钱包。如果你的余额在交易所,其托管决定此事,那里的清单完全不同。

重新质押包装如aEthrsETH:为何包装代币扩大损失

案件的另一方面值得特别关注。受影响的钱包以多重包装形式持有其以太坊资产:首先是液态质押代币rsETH,然后是贷款市场中的计息aEthrsETH。每一个包装都是一个进一步的合约,带来自己的权利、规则,以及在怀疑情况下带来弱点。

对你来说,这意味着一件事最重要:包装越深,你需要检查的合约链条就越长,才能真正理解你的头寸。任何通过重新质押和贷款建立收益的人至少应该能够说出涉及的层级。我们的质押平台概览为每个提供商说明了你和你的ether之间有多少层合约。

为了完整起见:9月15日,Kelp DAO明确表示其自身合同未受影响,且rsETH仍有支持。包装并未造成损失。一旦攻击者获得钱包访问权限,它使损失变得可移动。

自9月11日起的报告义务:《网络弹性法案》对钱包提供商的改变

对于作为德国用户的你来说,监管变化叠加其上,改变了此类漏洞的处理方式。自2026年9月11日起,欧盟《网络弹性法案》的首批报告义务生效。具有数字元素的产品制造商在意识到主动利用漏洞后24小时内,必须向欧盟机构ENISA和相关国家计算机应急响应团队报告早期警告;详细的漏洞通知最迟在72小时内跟进。该义务也涵盖已进入市场的产品。

钱包软件属于其管辖范围,我们在关于钱包制造商报告义务的文章中详细阐述了对其提供商的后果。在实践中这意味着:对于基于欧盟或向欧盟销售的提供商,未来你应该及时听到关于主动利用漏洞的通知。

尽管这种保护有限,但9月15日的案件清楚地显示了这一点。有问题的模块不是制造商的产品,而是为单个钱包定制的合同。对于自建或单独委托的合同,没有人会通知你。在那里,检查是你自己的工作。

检查Safe模块:要点总结

今天查看你的模块列表。
打开智能合约钱包的设置并阅读已启用的合约地址。不收取费用,也不需要签名。如果你无论如何都在考虑你的托管方案,同时比较哪种解决方案适合你的持仓:设备并排在我们的硬件钱包比较中。

移除你无法解释的内容。
任何你无法命名目的的模块,或你不再使用的应用程序所属的模块,都应通过disableModule关闭。安排在低费用的时刻进行交易。如果你宁愿在没有模块逻辑的简洁钱包中保留日常持仓,候选者在我们的软件钱包比较中。

计算你的收益头寸的层级。
对于每个包装头寸,注意你和你的ether之间的合约,并决定额外的收益是否值得那条链条。提供商及其合约层级在我们的质押平台概览中。

9月15日的案件并不是反对智能合约钱包的理由。它是阅读无人阅读的列表的理由。序列的细节由The Crypto Times于9月15日重建。(截至2026年9月16日。本文不构成投资建议。价格和费用结构会发生变化;购买前请与提供商核实条款。)

展开阅读全文
更多新闻