当前位置: 首页 > news >正文

20260428 - ZetaChain 安全事件分析

背景

ZetaChain 是一条内置跨链托管与消息传递的 Layer 1,其 PoS 验证者通过运行多链节点、以 TSS 联合签名的方式在 ZetaChain 与其他链之间传递消息并执行交易。

ZetaChain → Ethereum 的跨链流程:

  1. 用户在 ZetaChain 上调用 GatewayZEVMwithdrawAndCall(带资产)或 call(纯消息),指定 Ethereum 目标地址、Gas Token(ZRC-20)与 calldata。
  2. GatewayZEVM 将请求写入 ZetaChain 的 CrossChain 模块,生成一条状态为 PendingOutbound 的跨链交易(CCTX),明确 Ethereum 端需执行的交易参数。
  3. 验证者读取 CCTX,通过 TSS 密钥分片进行 MPC 式联合签名。达到阈值后,生成标准 ECDSA 签名,并由 ZetaClient 向 Ethereum 网络广播交易。
  4. Ethereum 执行
    • 若提取资产:TSS 交易触发 ERC20Custody 释放锁定的 ERC-20,或由 TSS 地址转账原生 ETH。
    • 若合约调用:TSS 交易直接调用 Ethereum 目标合约。
  5. ZetaClient 监听 Ethereum 结果:
    • 成功 → CCTX 标记为 OutboundMined,流程结束。
    • 失败 → 生成 PendingRevert,TSS 重新签名一笔回滚交易,经 GatewayEVM 将资产/消息退回 ZetaChain,最终触发 App 的 onRevert 兜底。
  • ZetaChain Tx:https://zetascan.com/tx/0xdaa19f9952b8d171ae3481a0b31b6c63d8ee4da03c5821663be5cdb29ddc4521
  • ZetaChain GatewayZEVM:https://zetascan.com/address/0xd9dbEec028C12D2dA09a05C9d26709c0Ec722BC1
  • Ethereum Tx:https://app.blocksec.com/phalcon/explorer/tx/eth/0x81fc9b2457b3ea66e2cefe2afe65d083ce358a11520e0f4aa5faad0bfea18a56
  • Ethereum GatewayEVM:https://etherscan.io/address/0x48b9aacc350b20147001f88821d31731ba4c30ed

这里参考了 SlowMist 推文中提到的两笔 tx,Ethereum 上发生的攻击交易好找,就是不知道 ZetaChain 上的交易是通过什么信息检索出来的,了解的读者可以指点一下小弟,十分感谢。

Trace 分析

在 ZetaChain Tx 中,攻击者调用 GatewayZEVM.call() 函数,传入以下参数:

  • receiver:设为 Ethereum 上的 USDT 地址
  • message:设为 USDT.transferFrom() 的 calldate

image

随后该笔跨链调用被验证者捕获,经过 TSS 的签名后,在 Ethereum 上被执行。

在 Ethereum Tx 中,执行了跨链信息,从 0x8f1a 中转移了 USDT。

image

代码分析

ZetaChain GatewayZEVM

由于 ZetaChain GatewayZEVM 在区块链浏览器上没有开源,所以通过 Github 的代码进行分析:https://github.com/zeta-chain/protocol-contracts-evm/blob/f8f4aef0ddc47a4de0734271db6063f459967c7f/contracts/zevm/GatewayZEVM.sol

可以看到 call() 函数没权限管理,任何人都可以调用。其次在参数校验方面,在打印 Called event 之前,进行了 validateCallAndRevertOptions 和 validateReceiver 两个校验。

image

validateCallAndRevertOptions 只检查了 gas limit 和 message size 两个方面。

image

validateReceiver 只检查了 receiver 地址为合约地址。

image

所以,由以上的代码可以得知,在 ZetaChain 上调用 GatewayZEVM.call() 函数所进行的参数检查是很宽松的。这也就导致了攻击者可以利用这个特点,构造恶意的跨链信息。

Ethereum GatewayEVM

跨链信息在被验证者捕获后,交由 TSS 签名,并在 Ethereum GatewayEVM 中通过 execute() 执行。权限控制:仅为 TSS_ROLE 调用。

image

进入到 _executeArbitraryCall() 函数,直接对跨链的目标合约与 calldata 进行调用。

image

基于上面的两个链上的 Gateway 合约代码,可以确认这个漏洞的影响范围是所有给 Ethereum GatewayEVM 进行过授权的用户。(按理来说其他 EVM 链也是一样的情况)攻击者可以跨链传入恶意的 message,利用 GatewayEVM 将已授权用户的资金转移。

后记

最近跨链桥多事之秋啊,前段时间 HyperBridge 才出了事情,今天又轮到 ZetaChain 了。写得比较匆忙,如果有不对的地方可以多多指教。最后,感谢你的阅读。

http://www.jsqmd.com/news/715518/

相关文章:

  • 网络药理学入门避坑指南:TCMSP数据库筛选,为什么你的结果总是不理想?
  • PDF文字提取介绍
  • 《AI大模型应用开发实战从入门到精通共60篇》025、微调后的模型部署:合并LoRA权重与量化导出
  • 2026年3月有名的箱包库存源头厂家口碑推荐,箱包库存/行李箱/拉杆箱/登机箱/电商箱包,箱包库存工厂哪家靠谱 - 品牌推荐师
  • 技术演讲从入门到精通:如何让台下开发者为你鼓掌?
  • 用AnyLogic的Agent类,我复刻了一个真实商场下班时的疏散模型(附完整项目文件)
  • 2026年3月服务好的宠物肿瘤医生选哪个,猫咪心超/猫科肿瘤/狗狗肥大细胞瘤/犬心脏彩超/狗狗皮肤瘤,宠物肿瘤医生找哪个 - 品牌推荐师
  • GitLab SSH 密钥配置
  • VMware Workstation 16/17 启动虚拟机报错‘DevicePowerOn失败’?别慌,修改.vmx文件这个参数就能解决
  • 0. STM32 相关硬件
  • 告别繁琐手动分层:LayerDivider智能插画分层工具完全指南
  • 从ARM架构到台积电工艺:手把手教你读懂手机芯片发布会上的‘黑话’
  • CAN FD时代,你的DBC文件还够用吗?聊聊Vector CANdb++与Influx Dialog的选型与实战
  • AI智能体记忆管理革命:可回滚、可审计的NOVYX Memory Skill深度解析
  • Java 25虚拟线程资源调度失效真相(92%开发者踩坑的调度器配额陷阱)
  • 2026年3月冒菜品牌口碑推荐,冒菜/麻辣烫/餐饮/冒菜店,冒菜公司有哪些 - 品牌推荐师
  • P15262 [USACO26JAN2] The Chase G
  • 别再硬算公式了!用Matlab Filter Designer工具箱,5分钟搞定CIC滤波器设计与仿真
  • 避坑指南:Plotly设置多Y轴时常见的5个错误及修复方法(附代码)
  • 从凸包翻车到25m网格——记录我做iOS足迹App时的面积计算踩坑之路
  • 新手也能搞定的电赛A题硬件搭建:从全桥整流到SPWM,手把手复盘我们的省一方案
  • 3分钟掌握:Windows免费虚拟光驱工具WinCDEmu完全指南
  • 如何用sf包彻底改变R语言空间数据分析:7个实战技巧
  • 后缀自动机模板
  • memtest_vulkan:GPU显存稳定性的终极检测方案
  • Artisan咖啡烘焙软件:3步掌握专业烘焙数据可视化
  • 从零到一:用Acconeer A121雷达DIY一个智能存在检测器(含STM32源码)
  • 2. 梯度下降算法分类
  • 为什么你的Copilot Next总在关键场景“失语”?深度拆解AST解析延迟、Context Window溢出与Token预算超限的3重根因,附可复用的诊断脚本
  • 从集创赛一等奖作品看TEE的未来:RISC-V双核SoC如何解决隐私计算的性能瓶颈?