On June 14th 2026, the legacy rollup Aztec was exploited for $2.28M. This article is about a different bug in more legacy code but had the same principle: the verifier and executor had different views of the code.
To withdraw funds on Aztec 2.0, a user would submit a cryptographic proof. The verifier was the onchain machine that checks the proof against the rules. The settlement contract interprets the same data, and executes on it. The contact includes an escape hatch to allow users to withdraw their funds directly.
The flaw was improper binding of the proved merkle root to a valid merkle root. Notably, the circuit checked that the merkle root proof was valid, and the provided merkle root was the legitimate. It did NOT check that the provided and calculated merkle root were the same. Thus, an attacker could craft a tree of their own with arbitrary nodes to prove it.
The escape hatch circuit was removed entirely from their codebase but the deployed code still contained the flaw. A good quote from the article about this: "The repository had moved on. The chain had not". The original exploit took 1.6K ETH worth $2M. Several other exploits trickled in for other tokens like Dai, renBTC, and others.
The community always wants decentralization until something like this happens. They had no ability to update the contracts because they had given up their permissions. Most of the funds had been removed from the blockchain but this is what remained. Should we just wait for the old code to be exploited, or withdraw the funds from the contract first? If they would have taken the funds at the time, people would have called it a scam. There's just no winning here.
There's a lot of thought that needs to go into deprecating a product. It's weird that Aztec has deprecated two blockchains with millions still in them. A good article on back to back hacks on Aztec.