Hack Database

zkLink: A Forged Record Let an Attacker Take $783K From Its Bridge

An attacker made zkLink Nova's bridge accept a forged record of approved withdrawals and took about $783K. zkLink has offered a 20% bounty.

zkLink: A Forged Record Let an Attacker Take $783K From Its BridgeLogo: zkLink (GitHub)
zkLink Nova, whose bridge was drained.

Key numbers

  • About $783K

    Stolen

  • Ethereum and Optimism (per zkLink)

    Chains hit

  • 20% if funds are returned

    Bounty offered

  • Unidentified

    Attacker

Late on Wednesday 28 October 2026, a wallet asked the bridge behind zkLink Nova to pay out money it had no claim to. The bridge paid, because it had just been handed an official-looking record saying the wallet was owed the money, and the record had arrived through the bridge's own trusted channel.

By early on 29 October about $783,000 had gone, according to SlowMist, a blockchain security firm. Blockaid, another security firm, raised the alarm at 02:24 UTC that day with a count of about $786,000 drained "so far" and the attack "still ongoing". zkLink stopped its network, offered the thief 20% to give the rest back, and is still waiting for an answer.

A shrinking network

zkLink Nova is a small blockchain built on top of other blockchains. People move their crypto into it through a bridge: they lock tokens in a vault on Ethereum or another network, and receive matching balances on Nova. When they leave, the vault pays them back. The arrangement is a lot like a foreign exchange desk that holds the real currency in a safe and hands out credits.

Nova had its moment in mid 2024. The value locked in it peaked at about $1.05 billion on 24 July 2024, according to DefiLlama, a site that tracks crypto deposits. By the end of October 2026 it was about $2 million. The decline came long before the hack: the attacker robbed a network that had already lost almost all of its deposits.

How a fake record got through

Nova does not send the vault every single transaction. It bundles thousands of them into batches and sends a short summary of each batch, a kind of fingerprint, to the vault on Ethereum. That summary is the vault's record of who is allowed to withdraw what. A withdrawal is paid only if it matches the latest accepted record. In normal operation, each new record comes with mathematical proof that it is genuine.

SlowMist published its analysis on 31 October. In plain terms, it found two weaknesses that worked together. The first was in the part of the bridge that receives new records on Ethereum. It checked only that a record had come through zkLink's own official messenger, a component zkLink calls the gateway. It did not check the proof. It behaved like a bank that pays any instruction delivered in its own branch envelope, without reading the signature inside.

The second weakness was in the messenger. zkLink's Arbitrator contract, the code that passes messages between Nova and the other chains, could be asked by a public relay service to deliver messages on anyone's behalf. After a genuine message from Linea, another network linked to Nova, was delivered, the Arbitrator left behind a temporary "already verified" mark and failed to clear it. SlowMist said the attacker reused that leftover mark to send a message of its own through the official channel. The message installed a forged record, and the vault then paid withdrawals that matched it.

Blockaid's alert described the same thing more briefly: a forged batch record injected through a public relayer, followed by withdrawals from Nova's Ethereum vault to addresses the attacker chose. zkLink has not published its own account of the cause.

What was taken

SlowMist counted 12 withdrawals against the forged record: one of ETH, Ethereum's own coin, and 11 of other tokens. Unchained, a crypto news site that traced the Ethereum side, reported that the first transaction, confirmed at about 22:21 UTC on 28 October, took about 245.7 pufETH, worth more than $600,000, along with about 12.6 ezETH, about 22.43 ETH and ten other tokens. pufETH and ezETH are receipts for ETH that has been staked, or locked up to earn interest, through two services called Puffer and Renzo. A second transaction at about 01:43 UTC on 29 October collected small amounts of dozens of tokens, plus about 216.4 million ZKL, zkLink's own token, Unchained reported. A tiny third withdrawal of about 0.0025 ETH followed at about 10:06 UTC. The two counts do not line up: Unchained lists more assets than SlowMist's 12 withdrawals, and neither zkLink nor the two firms has reconciled them.

zkLink said the attack targeted its Arbitrator contract on both Ethereum and Optimism, a second network built on top of Ethereum. The estimates differ slightly: SlowMist says about $783,000, Blockaid said about $786,000 while the drain was running. CMZ uses SlowMist's figure, which came after the attack ended.

Shutting the door, then a bounty

zkLink's first statement came at 09:06 UTC on 29 October, almost seven hours after Blockaid's alert. It said it had "identified an ongoing exploit targeting zkLink Nova's Arbitrator contract on Ethereum and Optimism", asked whoever was responsible to stop, and offered a "20% white hat bounty", the industry's term for a reward paid to a hacker who returns funds. At 13:08 UTC it listed emergency measures: block production on Nova suspended, the affected contracts patched, withdrawal channels switched off and a full security review under way. It said Nova would be restored "only after we have fully confirmed that all risks have been eliminated". Unchained found Nova's Ethereum vault marked as paused at about 20:50 UTC.

On 30 October zkLink formalised the offer in two parts. Anyone whose information materially helps recover the funds may receive up to 20% of the amount recovered. The attacker may keep 20% if it returns everything, and zkLink "will not pursue further legal action in respect of the returned funds". Contact goes through zkLink's X account or its team email.

zkLink has not said how much of the stolen money belonged to users, or whether it will repay them.

Not the first forged record

Bridges keep failing in the same place: the point where one network tells another what it is allowed to pay. In April 2026 a forged message emptied Kelp DAO's bridge of $292 million and set off a run on Aave, the largest crypto lending market. In August 2026 an attacker forged three trillion ONE tokens on Harmony, and Harmony's only remedy was to delete a day of everyone else's transaction history. zkLink's loss is far smaller. The failure is the same kind: a system that believed a record because of where it came from, not because it could prove it.

The aftermath

As of 2 November 2026, zkLink has not announced any return of funds, any contact with the attacker or any plan to repay users. Its last public statement was the bounty offer of 30 October. zkLink Nova remains offline, with block production stopped and withdrawals switched off, and zkLink has given no date for restarting it. DefiLlama still lists about $2.1 million locked in Nova, money that users cannot move while the network is down.

No one has been named or charged, and no security firm has linked the attacker to a known group. zkLink has not published its own post-mortem. SlowMist's advice to other bridge builders was to clear temporary values before every call, tie every check to the message it belongs to, and verify each new withdrawal record on its own merits instead of trusting whoever delivered it. The case is counted at about $783,000, SlowMist's figure.

What this teaches

  • Who sent a message is not proof that the message is true. zkLink's vault trusted any record that arrived through its own messenger and skipped the proof.
  • Leftover state is dangerous. A 'verified' mark that should have been wiped after one genuine message was reused to carry a forged one.
  • Public helper services widen the door. A relay that lets anyone send messages turns an internal shortcut into a public one.
  • Small, fading networks still hold real money. Nova had shrunk from about $1.05B to a few million dollars and was still worth robbing.
  • A bounty is an offer, not a recovery. Four days after the attack, zkLink's 20% offer had produced no announced return.