NullMeridianLog

28 Oct 2026 (UTC)

zkLink Nova: Stale Arbitrator Auth Hash Let a Forged Batch Root Drain the L1 Bridge

zkLink Nova's Ethereum bridge lost ~$780K–805K after a stale Arbitrator auth hash let an attacker install a forged batch root. Per SlowMist, Phalcon.

  • Event date
  • Incident typeBridge exploit (developing)
  • Bug classBridge & cross-chain
  • Published

Loss, as sourced

~783.1K, per SlowMist (no currency given); ~$780K, per BlockSec Phalcon; ~$786K, per Blockaid; ~$805K, per Defimon.

Traceability

Primary sources

  1. 01x.comSlowMist, 29 Oct 2026 02:41 UTC (opens in a new tab)
  2. 02x.comBlockSec Phalcon, 29 Oct 2026 05:07 UTC (opens in a new tab)
  3. 03x.comzkLink statement, 29 Oct 2026 09:06 UTC (opens in a new tab)
  4. 04x.comzkLink update, 29 Oct 2026 13:08 UTC (opens in a new tab)
  5. 05etherscan.ioexploit tx, 28 Oct 2026 22:21:35 UTC (on-chain) (opens in a new tab)

In brief

Root cause: Per SlowMist and BlockSec Phalcon: Arbitrator.claimMessage did not clear the transient finalizeMessageHash, so a second claim in the same transaction passed on the first claim's hash. The claim path accepted a caller-supplied target and calldata, which let the attacker run ZkLink.syncBatchRoot under the gateway's identity and install an attacker-chosen batch root.

Timeline, as sourced: Exploit tx 28 Oct 2026 22:21:35 UTC (on-chain). zkLink statement 29 Oct 09:06 UTC and update 13:08 UTC (per zkLink). No post-mortem found.

Account, as sourced

Ethereum, 28 Oct 2026, 22:21 UTC. zkLink Nova, a rollup whose L1 escrow and ERC20 bridge hold bridged assets.

Per SlowMist (alert (opens in a new tab)): Arbitrator.claimMessage did not clear the transient finalizeMessageHash or require a fresh authenticated callback per call. Through the publicly callable SyncL2TxHashRelayer, the attacker populated a valid hash, then reused it with EthereumGateway.sendMessage as the claim target. That ran ZkLink.syncBatchRoot under the gateway's identity, installed an attacker-chosen l2LogsRootHashes root, and withdrew assets with proofs against it.

Per BlockSec Phalcon (analysis (opens in a new tab)): transient storage persists until the transaction ends, so a second claim in the same transaction passed on the first claim's hash, and the claim path accepted a caller-supplied target and calldata. Twelve withdrawal proofs took 22.4313 ETH and 11 ERC20 assets, including ~245.74 pufETH, 18,113.45 USDC and 12.57 ezETH.

Confirmed (on-chain): the attack transaction succeeded at 22:21:35 UTC in block 26294188 (tx (opens in a new tab)). It was sent by the address Etherscan labels "zkLink Nova Exploiter 1", 0xaCA0655a11200A80d33D0E48786317304cDE5718 (opens in a new tab), to contract 0xD5f162B68a0281686E8Dc76dB8d67d2f3E6Aff07 (opens in a new tab).

Loss, as sourced: ~783.1K, no currency given (SlowMist (opens in a new tab)); ~$780K (Phalcon (opens in a new tab)); ~$786K (Blockaid (opens in a new tab)); ~$805K (Defimon (opens in a new tab)).

Claimed (zkLink) (statement (opens in a new tab)): the exploit targeted the Nova Arbitrator on Ethereum and Optimism; a 20% white-hat bounty is offered. In an update (update (opens in a new tab)): Nova block production is suspended, affected contracts emergency-patched, withdrawal channels temporarily disabled, and services return only after risks are confirmed eliminated.

Unknown: Optimism-side losses; whether funds return; a zkLink post-mortem.

Summaries of public sources as of the published date; except where marked (on-chain), not independently verified by NullMeridian. Figures are the sources’ own and are attributed; where sources disagree, each is given. Sources may since have changed. Not legal, financial or investment advice.