治理无锁致 5.57 万损失:闪电贷夺权 X100 国库
核心要点
复盘 2026 年 10 月X100 与NEM两起安全事件,重点剖析X100 因治理即时生效且无时间锁,被攻击者利用闪电贷在单笔交易中掏空国库 475 万美元。
据 Woofun AI 消息,2026 年 10 月 19 日至 10 月 25 日期间, 与 网络接连爆发两起严重安全事件,暴露出 DeFi 协议在治理逻辑与业务代码层面的深层脆弱性。其中, 项目因治理权限即时生效且缺乏执行时间锁,导致攻击者利用闪电贷资金在单笔交易内夺取参议院控制权并掏空国库,成为本周最典型的技术性治理失败案例。
Woofun AI 整理数据显示,本期跟踪的两起事件估计总损失约为 $5.57M。除 X100 外, 也因税费结算存在业务逻辑缺陷而遭受攻击,其公开告警发表于 10 月 22 日,由 Phalcon 团队进行分析。
尽管 NEM 事件的损失相对较小,但两起事件共同指向了智能合约设计中对于状态变更与权限授予之间时间窗口的忽视。X100 Freezer 的损失金额对应下文分析的代表性交易,与 Phalcon 最初的估算一致,且未计入后续报道中可能存在的额外资金提取行为。
2026 年 10 月 24 日,部署在 Ethereum 上的 X100 Freezer 遭到精准打击,造成约 $4.75M 损失。Freezer 作为一个链上质押与流动性管理系统,其核心合约 0x79f3...2a46 同时管理着项目在 /V4 以及 上的流动性池。该协议通过 继承 治理合约,由参议院成员通过提案和投票来决定国库资金的操作。
然而,其治理设计存在致命缺陷:新形成的冻结余额能够立即换取参议院席位,且提案批准与执行之间没有任何时间锁机制。攻击者正是利用这一漏洞,通过闪电贷资金购入并冻结代币,在同一笔交易内取得多数席位,进而通过并执行恶意国库提案,最终获利离场。
深入剖析合约逻辑,X100 用户通过调用公开入口 freeze() 将 代币冻结在不同档位的质押仓位中以获取奖励。合约内部先转入用户代币,再调用私有函数_freeze() 创建质押仓位并更新记账,其中_tierTotal[owner][tier]记录各账户在各档位的冻结数量。_freeze() 更新余额后,通过_onStakeChanged(owner) 通知治理系统。账户需通过 applyForSenate() 申请加入参议院候选名单,该入口调用_register() 记录注册状态、收取候选人费用,并再次触发质押量更新钩子。
该钩子跳过未注册账户,对已注册账户通过_link() 插入或移动账户,维护按冻结余额排序的列表。isSenator() 将列表中的前 senateSize 个账户识别为参议员,系统支持 3 至 21 个席位,每席一票。冻结代币还受取款期限约束,_unfreezeAt() 根据仓位的冻结时间戳 frozenAt 和质押档位计算解冻时间。参议员通过 propose() 提交允许执行的国库操作,合约记录提案并自动为提案人投出一张赞成票。其他参议员通过 vote() 投票,_tally() 统计当前席位中的赞成票。
提案记录创建时间,并根据默认值为三天的 votingPeriod 设置截止时间。DexTreasury._isProposable() 允许提案调用 v3Swap() 等国库函数,这些函数的 onlySenate 修饰器要求调用来自合约自身,执行流程则使用获批提案的数据发起自调用。操作完成后,Freezer._afterExecute() 检查剩余 X 余额是否覆盖 totalFrozen,以保留冻结本金总额。

评论
暂无评论