b bianchina.xyz
bianchina.xyz / layerzerolou-dong-an-li

LayerZero漏洞案例复盘:跨链消息中的真实风险与防御

复盘LayerZero生态中的典型漏洞案例,包括trustedRemote配置错误、adapterParams被截断、回调权限校验缺失等问题,并给出防御方案与上线前自检清单。

LayerZero漏洞案例 - LayerZero漏洞案例复盘:跨链消息中的真实风险与防御

极速体验

毫秒级响应,全球节点加速

🔒

资产安全

多重加密,冷热钱包分离

🌐

覆盖全球

180+ 国家与地区可用

📅 2026-05-24T06:12:21.526715+00:00 🔄 2026-05-24T14:44:05.449534+00:00

跨链协议的安全性永远是讨论的焦点。LayerZero 漏洞案例并不少见,绝大多数并非协议层缺陷,而是接入层的配置失误或逻辑漏洞。把这些案例拆开看,可以让自己的项目少走很多弯路。本文挑选三类典型问题展开复盘,结合 Binance 智能链与多条 L2 上的真实事故谈应对策略。

trustedRemote配置失误

第一类是 trustedRemote 配置错误。某项目在上线前匆忙部署,把 setTrustedRemote 的对端地址填成了 EOA 而非合约。攻击者只需控制该 EOA 就能向应用合约发送任意 payload。虽然资金没被直接窃取,但项目方被迫紧急暂停服务、重新部署。教训是:trustedRemote 必须经过双重确认,最好通过链下脚本读链上当前配置并与预期 hash 比对。建议把这一步纳入与 必安 链相关项目的标准部署流程。

adapterParams被截断或未校验

第二类问题与 adapterParams 有关。LayerZero 允许用户在 send 时附带 adapterParams,指定目标链 gas 上限与扩展行为。如果应用层未校验该参数,攻击者可以构造异常 adapterParams,导致目标链 lzReceive 消耗过多 gas 或者执行非预期分支。某项目就因此被刷出大量无效消息,目标链费用飙升。最佳实践是把允许的 adapterParams 范围写入 require 校验,超出即 revert。B安交易所 上几个新版接入合约已经采用这一模式。

回调权限缺失

第三类是 lzReceive 权限校验不严。lzReceive 必须只允许由本地 Endpoint 调用,并且 srcAddress 必须等于 trustedRemote[srcChainId]。某项目漏写了第二条检查,结果攻击者通过其他链上的恶意合约伪造 srcAddress 调用 lzReceive,直接调用应用的特权函数。修复方案是把这两条检查封装在 LzApp 基类的 modifier 中,所有继承类都不能绕过。BN官网 推广的安全模板也把这两条放在最显眼位置。

storedPayload被滥用

storedPayload 机制设计用于保存失败消息以便重试,但攻击者可以通过故意构造大 payload 触发存储,造成存储膨胀。建议在 lzReceive 中限制 payload 长度,超出直接 revert(注意 revert 在 nonblocking 模式下也会存到 storedPayload,所以需要在外层就拦截)。这种细节在 币岸 生态的多个项目审计报告中都被反复强调。

上线前自检清单

基于这些案例,可以提炼出一份简短的上线自检清单:trustedRemote 配置是否双重确认、adapterParams 是否有范围校验、lzReceive 是否做了 Endpoint 与 srcAddress 双重检查、payload 长度是否设上限、storedPayload 是否接入监控告警。把这五项放在合约 deployment 脚本的 sanity check 阶段,能在第一时间发现配置错误。

小结

LayerZero 漏洞案例提醒我们:跨链协议的安全边界,往往不是协议本身决定的,而是接入方在第一公里与最后一公里上的细致程度。把每一个回调、每一个配置都当作信任边界来对待,安全自然就有了底。