Kate Irwin 披露 GalaChain 再遭攻击
北京时间 8 月 21 日,曾在 Decrypt 和 Blockworks 任记者的 Kate Irwin 披露了一起涉及数百万美元的黑客攻击事件,损失超过 300 万美元。受害者是 Gala Games。
这次事件发生在 Gala Games 过去曾处理过私钥泄漏事故之后。两年多前,黑客曾因私钥泄漏铸造了价值 2 亿美元的代币;而在 2024 年 5 月那起攻击中,黑客获取了高权限地址的私钥。后续黑客归还了盗取资金,Gala Games 也销毁了额外铸造的代币。
漏洞出在 EIP-712 签名处理逻辑
这一次的问题并非管理不善,而是 GalaChain 代码逻辑层面的漏洞,具体出在处理 EIP-712 结构化签名的 getPayloadToSign 函数。
EIP-712 本应用类型声明告诉用户自己签的是什么,但真正参与哈希的只有 types 字段列出的内容。GalaChain 的实现又允许调用方把 types 随 DTO 一起提交。如果实际数据里出现了 types 没有声明的字段,这些字段就不会被签名覆盖。链上验证的是受害者签过的那一部分,攻击者额外塞进去的收款地址和数量却也能随交易一起执行。
攻击链条如何运作
攻击链条因此变得很隐蔽。受害者可能只是曾在 GalaSwap 做过一次 Swap、AddLiquidity 或 CollectPositionFees,留下一个有效签名。攻击者拿到签名后,不需要破解私钥,而是把它复用到 GalaChainToken 的 TransferToken 场景,同时在 DTO 里加入未声明的 to、quantity 和 tokenInstance。
由于这些字段没有进入原来的签名哈希,验签仍会恢复出受害者地址,系统便认为本人发起转账,绕开授权额度检查并转走资产。
文中举了一个生活化的解释:用户先签了一张看起来正常的纸,比如「我同意在交易所做一次正常的交易 / 添加流动性」,攻击者在拿到这张签过字的纸后,在纸上加上「我同意把我所有的币转给攻击者」。因为新加入内容中的字段没在原来的声明里,系统就会认为这些内容不需要签名保护,直接照办。
链上监测与资金去向
在攻击发生当天,Lookonchain 就监测到一个新建地址接收了跨链的 GALA 和 KTA 代币,并出售为了 ETH。
Kate Irwin 查证称,这次被盗取的 GALA 中有超过 16 亿枚来自与 Gala Games 联创兼首席执行官 Eric Schiermeyer 有关的地址。由于影响范围不大且没有波及到用户,Gala 及 Eric Schiermeyer 目前都没有在官方平台或社交媒体表态,也没有回应 Kate Irwin 的置评请求。
补丁已合并,项目未公开说明
虽然没有公开表态,项目团队很快完成了漏洞修复。补丁逻辑并不复杂:在生成或验证签名负载前,递归检查每一个实际存在的字段是否都被相应类型声明;只要多出未签名字段,交易就会被拒绝,完整声明的合法请求不受影响。修复 PR 在 8 月 18 日创建后约 14 分钟合并。
文章最后指出,Web3 项目常把安全叙事压缩成私钥、多签和审计三件事,但钱包里展示的结构化签名并不等于整份请求都被签名保护。合约逻辑正确,也不代表 SDK、网关和链码对同一份数据有相同理解。攻击者不一定需要突破防线,只要找到两个模块对「用户同意了什么」理解不一致的缝隙,就足够完成一次盗转。
类似攻击在 DeFi 赛道中时有发生,但发生在链本身逻辑上的情况很少见。文章认为,这种在消息验证逻辑上的严重漏洞,对想要提升效率的自建链敲响了警钟。
在提高效率之前,安全应当放在更前面。


