撰文:angelilu,Foresight News
2026 年 6 月 25 日凌晨 6 点 18 分,一份编号为 67 的治理提案出现在 Tornado Cash DAO 的投票页面上。

标题写得很正式:「建立 0.5% 费率标准与 90% 动态通缩销毁方案」。正文洋洋洒洒,声称要把中继者注册表升级到「V5 Strategy A」架构,把协议收取的手续费 90% 永久销毁、10% 分给质押者,并附上一套「财富正向循环」的经济模型推演。
提案人还申请从国库领取 50 枚 TORN,用于补偿部署合约时预付的 Gas 费——这个细节让整份提案看起来像是一个认真负责、自掏腰包的社区贡献者写的。
但这份提案的合约代码没有经过任何验证。即提案的执行逻辑(Calldata)未在区块浏览器(如 Etherscan)进行源代码验证,没有验证,社区看到的只是一堆机器码,无法直接审查。Tornado Cash 历史上的正常提案都会做这一步,这份提案跳过了。
L2BEAT 研究员Sergey Shemyakov是第一个注意到这一点的人。提案上线约 8 小时后,他艾特安全研究员 Pascal Caversaccio 表示:「这份提案逻辑异常复杂,请帮我独立审查。」

Security Alliance 研究员 Pascal Caversaccio 很快给出了结论。
提案的真实目的:把协议的管理员地址偷偷换掉
Caversaccio 用反编译工具把提案合约的字节码还原出来,认定这个提案是恶意的。
代码里有一个名为「governance(治理者)」的函数,功能只有一个:返回一个地址,告诉协议「谁是管理员」。而这个函数里写死的地址,是攻击者自己的钱包。

在 Tornado Cash 的架构里,协议的各个部分都会调用这个函数来确认最高权限归谁。一旦提案通过执行,原来指向社区治理合约的地址就会被悄悄替换成这个攻击者地址。
真实的治理地址是 0x5efda50f22d34F262c29268506C5Fa42cB56A1Ce;
伪造的攻击者地址是 0x5efda50f22d34f272c7077689d6abc42f15e285f。
两个地址前 15 个字符完全一样,从第 16 位才开始出现差异。普通人用肉眼对比很难发现。
如果这份提案通过,后果是:协议认定的「最高管理员」地址会被悄悄换成攻击者的地址。届时攻击者可以用这个身份,把目前锁在治理合约里的约 2300 万美元 TORN 代币提走——这笔钱是社区成员质押进来参与投票用的。除此之外,攻击者还可以把协议内所有中继者(负责帮用户转发交易的服务商)的余额强制清零,让整个协议瘫痪。
攻击者是谁,钱从哪来
提案创建者的钱包地址是 0xd4eca8c9242b9f9faa3cf19a78defc21dc97a925。
Caversaccio 追溯这个地址的资金来源,发现它在提案提交前 4 天刚刚收到一笔转账。转账方是 Railgun——另一个链上隐私混币协议,也是 Tornado Cash 的直接竞争对手。通过 Railgun 转账意味着资金来源被混淆,无法溯源到真实身份。

社区发现后,投票现状如何
截至目前,这份提案的投票结果是:赞成 0 票,反对 27,163 枚 TORN,占比 100%。投票在 6 月 30 日关闭。
Tornado Cash 的治理规则要求至少 10 万枚 TORN 参与投票才算达到法定人数,目前只到了 27%。除非接下来 4 天内出现大规模的异常赞成票,把法定人数推上去并翻转结果。否则这个提案失效和被否决结果都是不执行。但这件事给人带来的警示作用更大。
这已经是 Tornado Cash第二次面对这类攻击了。2023 年 5 月,一位攻击者通过一份隐藏自毁函数的提案拿到了 120 万票的治理控制权,彼时整个 DAO 的合法投票只有 7 万票。那次攻击者提走了约 217 万美元的 TORN,洗钱用的工具正是 Tornado Cash 本身,然后提交了一份「恢复治理」的提案,净赚约 90 万美元后全身而退。那次之后,没有人从根本上修复这套治理结构。
DAO 治理攻击,普通人怎么防
治理攻击已经是 Web3 的常规风险,不是某个协议的特例。2022 年 4 月,Beanstalk 被攻击者用闪电贷借出 10 亿美元临时投票权,在同一笔交易里通过提案、转走 1.82 亿美元、还清借款,全程不到一分钟。同年 2 月,Build Finance DAO 被攻击者通过伪造治理代币取得控制权,1100 万美元国库被清空。
攻击的形式在进化:从闪电贷抢票,到隐藏自毁函数,到这次的地址字符替换。但底层逻辑始终一样——DAO 的权力来自代币,代币可以被借、被伪造、被混淆。任何治理机制,只要能被代码操控,就能被攻击。
对于持有治理代币的普通用户,有几条路径切实可用。第一,关注安全研究员的实时预警,这次攻击正是被 L2BEAT 研究员第一个发出警报。第二,指向未验证合约的提案,大概率需要直接投反对票。第三,如果你持有协议治理代币但不打算主动参与,把投票权委托给活跃的社区成员,比让代币在钱包里沉睡更安全,沉默的代币只会让法定人数更难凑够。
对于协议开发者,更根本的防线是在治理层引入时间锁(timelock)——提案通过后不立即执行,留出 48 至 72 小时的窗口,让社区和安全研究员有机会审查并触发紧急暂停。Compound、Aave 等协议早已标配这一机制,Tornado Cash 至今没有,这也是其一种合规与抗审查的极端选择。





