合约管理员是谁:146 个 Morpho 金库的权限实测

审计查不出“明天谁能换掉代码”。五条 RPC 查代理槽、管理员与时间锁,抽查 146 个 Morpho 金库;附 Q3 12 亿美元黑客复盘。

合约管理员是谁:146 个 Morpho 金库的权限实测
一键发币: x402兼容 | Aptos | X Layer | SUI | SOL | BNB | ETH | BASE | ARB | OP | Polygon | Avalanche

一句话结论:审计告诉你代码是否安全,但它不告诉你"明天谁能换掉代码"。 2026 年 1–8 月,至少 13 亿美元的 DeFi 损失与泄漏或被盗的管理员密钥有关(按原文引用的一种统计口径),这一数字已经超过合约漏洞;2026 年 4 月 Wasabi Protocol 损失约 450 万美元,原因就是单个部署者 EOA 就能升级合约。好消息是:这件事你自己用五条 RPC 调用就能查。本文编译一篇完整的操作指南与一次真实抽查(@lowkeybuilds,dev.to,2026-10-13;抽查快照 2026-10-13),并补充 Hacken 的 2026 Q3 黑客报告(Cointelegraph,2026-10-15)与两起 10 月 15 日的新进展(Jupiter 未审计 YOLO 产品、Safe 的 Safenet Aegis)。披露:原文作者自建了工具 OneKeyAway(文中会再次注明),本文按"方法、代码与数据"引用。


一、五条 RPC 调用,查清"谁能换代码"

1.1 它是不是代理?

大多数可升级合约把实现地址放在固定存储槽(EIP-1967)。用 Foundry 的 cast:

RPC=https://base-rpc.publicnode.com
C=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913   # USDC on Base

# EIP-1967 实现槽
cast storage $C 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc --rpc-url $RPC
# EIP-1967 admin 槽(透明代理)
cast storage $C 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103 --rpc-url $RPC
# EIP-1967 beacon 槽
cast storage $C 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50 --rpc-url $RPC

陷阱 1:老代理用不同的槽。 USDC 对上面三条都返回 0,看起来"不可升级"——它其实可以升级,用的是更早的 ZeppelinOS 槽(keccak256("org.zeppelinos.proxy.implementation") / ...proxy.admin)。两族槽都要查。

陷阱 2:有些 admin 根本不在存储里。 Aave 的 pool 代理把 admin 作为 immutable 放在字节码里,要通过 ADDRESSES_PROVIDER() 和其 owner() 找;Aragon 应用(如 Lido 的 stETH)没有 admin 槽,升级走 DAO kernel 的 ACL,用 kernel() 进入。

1.2 谁持有 admin?

有 admin 槽就读它;如果是 UUPS 代理(有实现、无 admin),升级权通常挂在 owner() 或 AccessControl 角色上:

cast call $C "owner()(address)" --rpc-url $RPC
# AccessControlEnumerable:谁持有 DEFAULT_ADMIN_ROLE(0x00)?
cast call $C "getRoleMemberCount(bytes32)(uint256)" 0x0000000000000000000000000000000000000000000000000000000000000000 --rpc-url $RPC

如果 admin 是 OpenZeppelin 的 ProxyAdmin 合约,只是多跳一步:对它再调 owner()。

1.3 这把钥匙是什么类型?(最重要的一步)

浏览器不会告诉你这件事,但它才是真正的问题:

A=0x...                                        # 上一步找到的地址
cast code $A --rpc-url $RPC                    # "0x" 说明是 EOA:一把私钥
cast call $A "getThreshold()(uint256)" --rpc-url $RPC        # 是 Safe 就有答案
cast call $A "getOwners()(address[])" --rpc-url $RPC
cast call $A "getMinDelay()(uint256)" --rpc-url $RPC         # OpenZeppelin TimelockController
cast call $A "delay()(uint256)" --rpc-url $RPC               # Compound 风格 Timelock

陷阱 3:Safe 不自动等于多签。 1-of-1 或 1-of-3 的 Safe 意味着一个签名就能动一切。要继续递归它的 owners:一个 1-of-2 Safe,其 owners 是"时间锁 + 9-of-13 Safe"是健康的;1-of-1 Safe 的 owner 是 EOA,就是"多绕一步的单钥"。

陷阱 4:"EOA"不等于"热钱包"。 Circle 的 USDC admin key 几乎可以肯定在 HSM 里,机构 curator 常用 MPC 签名——这些链上看不见。你能说的只有:"没有链上多签、没有延迟,持有者在升级前得不到任何预警。"报告就按这个口径写,不要多说。

陷阱 5:公共 RPC 不稳定。 限流节点返回的错误很容易被读成"空槽"或"函数不存在"。下结论前换第二个端点重试。

补充陷阱 6(来自读者 @bloqarl):Safe 模块可以绕过签名。 getThreshold() 可能显示 3-of-5,但一个启用的模块可以不带任何签名调用 execTransactionFromModule——所以还要查 getModulesPaginated(0x1, n) 和 guard。

二、146 个 Morpho 金库的抽查结果

Morpho 金库是个好的测试对象,因为风险动作很具体:curator 启用一个新市场(V1)或添加 adapter 并抬高其上限(V2),就能把存款路由到新去处。 两个版本都把动作放在金库级时间锁之后。作者读取了所有 TVL ≥ 200 万美元的 146 个 Morpho 金库,并在链上解析了每个 owner 与 curator 密钥(快照 2026-10-13):

发现 数量/规模
Morpho 应用列出的金库,风险动作全部有时间锁(通常 3–7 天) 122 个
owner 或 curator 是单 EOA,或解析到单签名者的 Safe 22 个(约 13 亿美元)
未列出金库:时间锁为 0 + 单 EOA owner/curator 5 个(合计约 3.05 亿美元,其中一个占 2.83 亿)
62 个 Safe 中启用了模块(无交易 guard) 6 个(2-of-5,kpk 金库,约 5500 万美元)

怎么读这组数字:

  • 122 个有时间锁 = 储户有真实的退出窗口,这是好消息;
  • 那 22 个"单签"金库(约 13 亿美元)因为有 3–7 天时间锁,属于治理透明度问题而不是紧急事故,而且部分签名器可能有 MPC 背书;
  • 真正要盯的是 5 个未列出金库:零时间锁 + 单 EOA——一把钥匙就能立刻开新市场或 adapter。它们通常是私有或尚未完成配置的,Morpho 应用不会展示;但任何直接按地址集成金库的产品都应该自己查;
  • 6 个启用模块的 Safe 是 Zodiac Roles 白名单权限(列名单的 operator 可以免签名做特定调用),这是刻意且常见的设计——但它意味着 "2-of-5"不是全部故事,下一步要读的是"这些角色允许什么"。

工具披露:作者自建了 OneKeyAway(免费浏览器内检查器、最多 3 个合约/Safe 的邮件告警、给 agent 与脚本的 API)。其中 API 走 x402、按调用付费(0.01 美元/次,Base 或 Arbitrum 上的 USDC),失败调用不收费——如果你的交易/研究 Agent 要做"交易前合约权限预检",这正好是一个 x402 的实用场景。

三、Q3 复盘:12 亿美元里,77% 不在审计范围

Cointelegraph 报道的 Hacken 2026 Q3 报告给出了另一个视角——不是"哪个合约有 bug",而是"损失从哪来":

  • 107 起事件、约 11.8 亿美元,是 2025 Q1(Bybit 14 亿)之后损失最重的季度;
  • 77%(约 9.06 亿美元)来自被攻陷的供应商、开发者工具、已公开但未部署的修复,以及其他不在安全审计范围内的组件;
  • 四大事件:Bitget 3.87 亿、Liquid Network 3.2 亿、Tectonic 1.2 亿、Coldcard 固件漏洞约 1.15 亿;约 80% 的损失集中在四起里,98 起低于 1000 万美元(中位数 67 万);
  • 智能合约类事件是"最频繁"的(71 起、2.28 亿美元),但金额不是最大头——最高的金额在审计之外。

损失的回收结构同样值得记住:

  • 约 3.87 亿美元(33%)被追回或逆转:Liquid 事件中"白帽"归还 2.72 亿(约 85%);Tectonic 事件中 Cronos 验证者回滚了 114 分钟已结算链上历史,逆转约 1.112 亿/1.204 亿;Circle 和 Tether 冻结了与 Bitget 盗窃相关约 34 万美元;
  • 运营方自掏 4.1 亿美元补用户损失(Bitget 用户保护基金 3.87 亿,Triple-A、Coinsbuy、TAC 约 2200 万);
  • 仍有 3.84 亿美元(32%)既未追回也未被覆盖。

Hacken 的建议和本文前半部分完全同向:把审计范围扩展到预言机、桥、托管系统、签名权限等特权组件——"合约本身审计过了"不等于"控制链审计过了"。

四、"未审计"的新品该怎么读

同样是 10 月 15 日上线的两件事,正好给出两种读法:

  • Jupiter 未审计的 YOLO Beta,最高 1000 倍杠杆(The Defiant):用户与庄家(house)对赌;如果资金不足,盈利可以被排队、且没有保证的支付时间。这不是"技术故障",而是产品在条款层面写明的机制——"未审计"在这里意味着:合约风险由参与者承担,且赔付顺序不优先于平台。
  • Safe 在三条链上线 Safenet Aegis(The Defiant):安全网络检查每次 0.40 USDC,付给安全提供者;链上强制需要在该 Safe 账户上启用 Guard。它的意义是:风控开始变成"每笔交易付一次费的服务",并且可以选择"只报警"或"链上阻断"。是否值得,取决于金库规模与操作频率。

把两者放在一起看,"未审计"不等于"必然出事",它的准确含义是:你只能依赖公开文档、测试网和自身仓位管理,不能依赖第三方验证。 对你的行动要求是——仓位上限、单笔上限、退出路径,先想清楚再交互。

五、交互/存款前的权限检查清单

  • [ ] 先问一句:这个合约可升级吗? 查 EIP-1967 三槽 + ZeppelinOS 老槽;
  • [ ] admin 不在存储的,走 ADDRESSES_PROVIDER() / kernel() 等入口;
  • [ ] admin / owner / curator 是 ProxyAdmin?继续跳;
  • [ ] cast code:EOA 还是合约?是 Safe 就递归到最终签名人;
  • [ ] Safe 要查阈值、owners、模块、guard;1-of-1 与 3-of-5 + Zodiac 模块不是一回事;
  • [ ] 找时间锁:getMinDelay() / delay(),延迟就是你的退出窗口;
  • [ ] 公共 RPC 返回异常先换端点,别把限流当"空槽";
  • [ ] 直接集成的金库/合约地址,不要只看应用展示列表(未列出 ≠ 不存在);
  • [ ] 报告结论时按证据说话:链上看不见 HSM/MPC,就只写"无链上多签、无延迟";
  • [ ] 新协议的仓位管理先于收益率:未审计产品默认按不可追回处理。

最省事的一步:把这五条 cast 命令存成脚本,每次要存入一个不熟悉的金库前跑一遍。"谁能换掉代码"是可以在五分钟内查清的问题——只是绝大多数人没有查。


原文链接

  • @lowkeybuilds, Who can upgrade this contract? Five RPC calls, five traps, and 146 Morpho vaults(dev.to,2026-10-13;作者自建 OneKeyAway,文内披露):https://dev.to/lowkeybuilds/who-can-upgrade-this-contract-five-rpc-calls-five-traps-and-146-morpho-vaults-4gm1
  • Cointelegraph(Zoltan Vardai), Bitget, Liquid exploits push Q3 crypto hacks toward $1.2B(2026-10-15,引 Hacken Q3 报告):https://cointelegraph.com/news/bitget-liquid-exploits-push-crypto-hacks-near-12b-q3
  • The Defiant, Jupiter Launches Unaudited YOLO Beta With Up to 1,000x Leverage(2026-10-15):https://thedefiant.io/news/defi/jupiter-launches-unaudited-yolo-beta-with-up-to-1-000x-leverage
  • The Defiant, Safe Launches Safenet Aegis Security Network on Three Chains(2026-10-15):https://thedefiant.io/news/security/safe-launches-safenet-aegis-security-network-on-three-chains
  • Hacken Q3 2026 加密安全报告:https://hacken.io/insights/

相关阅读

系列另两篇:AI Agent 安全:九起事故、六项控制与 MCP 供应链("谁能碰你的 Agent 与本机凭据")与 外包渲染实测:四台笔记本农场 vs SheepIt 免费农场("谁能碰你的 3D 工程文件")。

本文由 DefiPlot 翻译整理,转载请注明出处。

免责声明

本文仅用于学习与研究目的,不构成任何投资建议、财务建议或交易建议。文中的链上数据、审计声明与损失统计来自公开来源(原文作者自述、Cointelegraph 报道及 Hacken 报告),未做独立链上复测;相关项目方与工具作者均带有各自立场,请自行核查并 DYOR(Do Your Own Research)。加密资产价格波动剧烈,链上交互与合约权限存在升级、授权、预言机、跨链桥与钓鱼风险,任何检查清单都不能替代自己的核验;请勿使用无法承受损失的资金参与交易。

本文属于「链上数据 / 安全」专题。查看专题全部文章 →
免责声明:本站资源仅用于学习目的,也不应被视为投资建议,读者在采取任何行动之前应自行研究并对自己的决定承担全部责任。