DEV Community

qanzhi111
qanzhi111

Posted on

zkLink Nova Bridge Exploit: Stale Transient Hash Forges Root in $786K Drain

Cross-chain bridges remain some of the most lucrative targets in the decentralized finance ecosystem, holding massive pools of locked assets. On October 28, 2026, the aggregated rollup protocol zkLink Nova fell victim to a sophisticated exploit that bypassed its core validation mechanisms. By manipulating EIP-1153 transient storage and exploiting an arbitrary call vulnerability, an attacker successfully forged a cross-chain batch root, tricking the Layer 1 escrow into releasing unauthorized withdrawals. The incident resulted in an estimated loss ranging from $743,000 to over $786,000, highlighting the severe risks associated with complex state management in bridge architectures.

What Happened: Timeline and Mechanism

The primary exploit occurred at 22:21:35 UTC on October 28, recorded in Ethereum block 26,294,188. Security firm Blockaid first flagged the ongoing attack early on October 29, estimating the initial drain at approximately $786,000. Other security analysts, including SlowMist and Parapet Labs, corroborated the event, placing the total loss in a range between $743,000 and $805,000 depending on the pricing models used.

Following the initial drain, zkLink officially acknowledged the incident on October 29 at 09:06 GMT, confirming that the exploit targeted the Arbitrator contract on Ethereum and Optimism. The team swiftly suspended block production on the Nova network, emergency-patched the vulnerable contracts, and disabled withdrawal channels. In a public statement, the protocol addressed the attacker directly:

"We urge you to cease further exploitation of zkLink Nova contracts across all chains and return the affected funds. In recognition of your cooperation, we are prepared to offer a 20% white hat bounty."

Despite the halt on Ethereum, the vulnerability's reach extended further. Parapet Labs reported that a second, unrelated actor reused the exact same flaw at 07:16 GMT on October 29, targeting zkLink’s escrows on Optimism, Base, Blast, and Mantle, draining an additional 24.76 ETH and various tokens.

Root-Cause Technical Breakdown

The exploit did not rely on stolen private keys or forged cryptographic signatures. Instead, it exploited two distinct design flaws within the Arbitrator.claimMessage() function to write a malicious Merkle root directly into the bridge's storage.

zkLink Nova’s architecture relies on a chain of trust where relayers pass messages from Layer 2 networks to the Arbitrator, which then forwards them to destination gateways like the EthereumGateway. These gateways ultimately update the batch roots in the main ZkLink contract. The security of this flow depends entirely on the Arbitrator only forwarding genuinely received messages.

The attacker bypassed this guarantee through a two-part vulnerability:

  1. Arbitrary Execution with Trusted Identity: The claimMessage function allowed the caller to specify both the target contract and the calldata. Because the call originated from the Arbitrator, the target contract saw the Arbitrator as the msg.sender. By setting the target to the EthereumGateway and the calldata to a syncBatchRoot function, the attacker bypassed the onlyArbitrator and onlyGateway access modifiers.
  2. Stale Transient Storage: To prevent the arbitrary call from succeeding, the protocol included a validation check using EIP-1153 transient storage. A variable named finalizeMessageHash was supposed to be written by a genuine message delivery and then checked. However, the protocol never cleared this transient slot after the check. Because transient storage is scoped to the entire transaction rather than a single function call, a stale hash from an earlier operation could be reused.

The step-by-step execution unfolded as follows:

  1. The attacker used a public relayer to claim a genuine, pending Linea message. This legitimate delivery armed the finalizeMessageHash transient slot with a valid hash.
  2. Within the same transaction, the attacker called the relayer again, this time passing the EthereumGateway as the target and a forged syncBatchRoot command as the calldata.
  3. The gateway accepted the command because it appeared to come from the trusted Arbitrator.
  4. The validation check passed because the attacker supplied the exact same gateway and calldata parameters as the first step, matching the stale transient hash.
  5. With the forged root now accepted by the ZkLink contract, the attacker finalized unauthorized withdrawals.

Why It Worked and Economic Impact

The attack succeeded because the protocol's developers assumed that transient storage would naturally isolate the validation state to the specific claim being processed. They failed to account for sequential calls within the same transaction context, allowing the attacker to "arm" the validation trap with a real message and immediately "trigger" it with a fake one.

The economic impact was swift and devastating for the escrow's liquidity. In the primary transaction, the attacker extracted 22.43 ETH alongside 11 different ERC-20 tokens. The largest single asset was 245.74 pufETH, valued at roughly $613,536, alongside 18,113 USDC and 3,361 USDT. The total value of this single transaction was approximately $778,625. Following the exploit, the Ethereum escrow was nearly emptied, leaving a residual balance of just 0.001 ETH. A subsequent transaction early on October 29 drained dozens of smaller tokens, including over 216 million ZKL.

Concrete Lessons for Builders and Users

The zkLink Nova exploit offers critical takeaways for the Web3 ecosystem:

  • Strict Lifecycle Management for Transient Storage: EIP-1153 transient storage is a powerful tool for optimizing gas and managing state, but it requires explicit clearing. Builders must ensure that any state written to transient storage is reset immediately after its intended use, preventing stale data from being exploited in subsequent calls within the same transaction.
  • Dangers of Arbitrary Calls: Allowing users or relayers to dictate the target and calldata of a privileged function is inherently risky. Even with msg.sender checks, delegating execution in this manner can allow attackers to chain unauthorized actions. Protocols should restrict target addresses to strict allowlists or avoid arbitrary execution entirely.
  • Continuous Monitoring for Users: Bridge users must recognize that even audited protocols can harbor complex logical flaws. Utilizing real-time monitoring tools to track escrow balances and large, anomalous withdrawals can help users react swiftly to ongoing exploits.

Closing Takeaway

The zkLink Nova incident underscores a fundamental reality of smart contract development: security is not just about preventing unauthorized access, but about meticulously managing the lifecycle of every piece of state. As protocols adopt advanced features like transient storage to optimize performance, the complexity of state management increases proportionally. Ensuring that every variable is initialized, utilized, and cleared within the exact scope intended is paramount. From an on-chain security and investigation perspective, firms like ChainSentinel continue to emphasize that rigorous state lifecycle analysis must be a non-negotiable standard in modern bridge auditing.

Sources: Security-firm advisories and crypto media.

Top comments (0)