Chainflip 在 TRON 上被盗 73.6 万美元:一笔已签名的交易如何被支付了两次
作者 Milan Voss · 发布于 · 英文原文
要点
- 2026 年 9 月 12 日,攻击者通过六次未经授权的支付,从跨链兑换协议 Chainflip 的 TRON 金库中取走了 736,442.17 USDT。
- 手法:在 TRON 上,Chainflip 从附加在交易上的 memo 中读取兑换指令。攻击者给 Chainflip 验证者已经签名的交易附加了新的 memo。软件把它当作一次失败的兑换,并在正常支付之外又做了退款——同一笔提款被支付了两次。
- Chainflip 暂停了网络、修复了漏洞,并在 9 月 16 日前恢复了其他路线的兑换。TRON USDT 流动性提供者目前承担损失:他们的余额被清零,应得金额记录在链上。偿付时间尚未披露。
- 对免 KYC 兑换的用户来说,教训在于协议风险,而不是审查:一条路线读取指令方式上的漏洞,就可能冻结或掏空这条路线,无论协议在封禁地址上持什么立场。
Chainflip 是什么
Chainflip 是一个跨链兑换协议:它在 Bitcoin、Ethereum、Solana 和 TRON 等区块链之间转移价值,不使用包装代币,也不使用传统跨链桥。流动性提供者把资产存入由一组验证者控制的金库,兑换由这些金库结算。TRON——包括原生 TRX 和 TRON 上的 USDT(TRC-20)——在 2026 年 6 月中旬在 Chainflip 上线。
事件经过(按时间顺序)
| 日期(UTC) | 事件 |
|---|---|
| 2026 年 8 月 | Chainflip 遏制了另一次针对 Ethereum 跨链消息与退款逻辑的攻击尝试;用户无损失。 |
| 9 月 10 日 | TRON 上的 USDT 被加入 Chainflip Lending。 |
| 9 月 12 日 01:44–03:10 | 攻击者从 TRON 金库提走 USDT:约 90 分钟内八次尝试,从小额开始、大致每次翻倍;其中六次产生未经授权的支付。后续 USDT 支付开始失败时,Chainflip 才发现,并暂停兑换。 |
| 9 月 13 日 | Chainflip 发布事件报告:损失 736,442.17 USDT,漏洞出在其自身对 TRON memo 的处理上,其他资金安全。 |
| 9 月 16 日 | 兑换与报价在网络其余部分恢复,TRON 被排除在外。 |
| 9 月 17 日 | 重启方案:TRON USDT 流动性提供者的余额清零,每人应得金额被复制到另一份链上记录中。 |
有一篇报道称 TRON 路线本身此后已按新的记账方式重启;另一些则说它仍被排除在外。我们无法直接向 Chainflip 确认其中任何一种说法,因此在发送 TRON USDT 之前,请在 Chainflip 自己的界面中查看该路线的状态。
memo 漏洞是如何运作的
在 Chainflip 支持的大多数链上,兑换指令放在专用的合约函数里——指令是被检查和签名内容的一部分。而在 TRON 上,Chainflip 改为从 memo(附加在交易上的自由文本字段)中读取指令。
这个差异就是整个故事:
- Chainflip 的验证者在 TRON 上签署一笔支付交易——一次普通的流动性提供者提款。
- 在它结算之前,攻击者给这笔已签名的交易附加了新的 memo。该 memo 不在验证者批准的内容之内。
- Chainflip 的软件在监视这笔转账时,把 memo 当作指令来读取:一次失败的兑换。
- 它为这笔“失败的兑换”发放了退款——在已经支付的提款之外。
重复六次,736,442.17 USDT 就没了。Chainflip 的修复措施是限制哪些 TRON 转账可以在 memo 中携带兑换指令。
这个通用教训比这次事件更古老:**任何在签名之后才读取的指令,都可能在签名之后被修改。**如果协议信任其签名者从未见过的数据,签名提供的保护就比看上去的要少。
谁来买单
Chainflip 表示损失由 TRON USDT 的流动性提供者承担。金库里的 USDT 现在远少于他们应得的数额,因此重启时 Chainflip 关闭了与 TRON USDT 相关的所有未结订单、策略和借贷头寸,把这些余额清零,并把应付金额保存在另一份链上记录中。Chainflip 承诺让他们得到全额补偿,但没有说明何时、以及用哪些资金。
事件期间有一笔金额为 115,654.41 USDT 的用户兑换未能支付,仍留在金库中,据称将在重启后支付。Chainflip 还已就被盗资金向交易所和其他各方发出标记,以防这些资金现身。
Chainflip 与 Bitget:两种不同的失败
在 Chainflip 事件两周后,中心化交易所 Bitget 损失了约 3.875 亿美元——其中一部分资金通过跨链协议被洗白。这两起事件常被一并提起,但它们并不相同:
| Chainflip(9 月 12 日) | Bitget(9 月 24 日) | |
|---|---|---|
| 是什么 | 跨链兑换协议 | 需 KYC 的中心化交易所 |
| 损失 | 736,442.17 USDT | 约 3.875 亿美元 |
| 薄弱环节 | 协议在签名后读取 TRON memo 的方式 | 内部审批系统,经由第三方软件的零日漏洞进入 |
| 密钥被盗? | 否 | 否 |
| 谁承担损失 | TRON USDT 流动性提供者(待偿还) | Bitget 保护基金 |
两起事件中,密钥都没有被触碰。出问题的是决定何时使用密钥的代码。我们对 Bitget 事件的完整分析:Bitget 被盗:3.875 亿美元是如何通过跨链兑换转移的。
如果您进行免 KYC 兑换,这意味着什么
人们讨论跨链协议时,常常着眼于审查——它们是否封禁地址。Chainflip 的案例提醒我们还有第二个、独立的风险:协议自己的代码。一条路线可能暂停,流动性提供者可能被迫等待,而原因与您和您的币毫无关系。
- **检查路线,而不只是协议。**协议可能在运行,而某一条链的路线却被暂停或排除。
- **暂停期间不要发送。**如果协议宣布了事件,请等它发出“已恢复”的消息后再存款。
- 在界面允许时,始终设置退款地址。
- **流动性是借给协议的贷款。**如果您提供流动性,就要承担协议的漏洞——正如 Chainflip 的 TRON USDT 提供者现在所面对的。
Chainflip 还有一个与审查相关的、独立的话题。其协议本身不审查地址;经纪商——以及通过任何经纪商行事的白名单审查方——可以拒绝被标记的存款。我们在目录中为每项服务标注这一点,并在各评测页面上引用来源。
常见问题
Chainflip 被盗了多少? 736,442.17 USDT,于 2026 年 9 月 12 日通过六次未经授权的支付,从 Chainflip 的 TRON 金库中被取走。Chainflip 称其他资金未受影响。
Chainflip 的 TRON 漏洞是如何运作的? 在 TRON 上,Chainflip 从附加在交易上的 memo 中读取兑换指令。攻击者给 Chainflip 验证者已经签名的交易附加了新的 memo;Chainflip 的软件把它当作一次失败的兑换,在正常支付之外又做了退款,于是六笔提款被支付了两次。
谁在 Chainflip 事件中损失了资金? TRON USDT 的流动性提供者。Chainflip 把他们的实时余额清零,并把每个人应得的金额记录在另一份链上余额中。它承诺让他们得到全额补偿,但没有披露时间,也没有说明资金来源。
Chainflip 恢复运行了吗? Chainflip 表示,到 2026 年 9 月 16 日,其网络其余部分的兑换和报价已经恢复,当时 TRON 路线被排除在外。向 TRON 发送 USDT 之前,请先确认该路线的状态。
这和 Bitget 被盗是一回事吗? 不是。中心化交易所 Bitget 因攻击者欺骗其内部审批系统,损失约 3.875 亿美元。Chainflip 的损失则源于其协议读取 TRON memo 方式中的漏洞。两起事件都说明,薄弱点往往是密钥周围的代码,而不是密钥本身。
来源
- Chainflip,X 上的事件报告,2026 年 9 月 13 日
- crypto.news · CryptoSlate · Unchained · Crypto Times · Blockchain Reporter · Blockfence
- 我们的记录:Chainflip 在我们目录页面上的事件,以及损失记录(英文)
我们与 Chainflip 没有商业关系。当 Chainflip 发布完整的事后分析或偿付方案时,本文将更新。