The deprecated RollupProcessorV3 was still unpaused and still held leftover funds.
processRollup(bytes,bytes) did not enforce rollupProviders[msg.sender], despite comments saying callers must be an approved provider or use the escape hatch.
Execution path:
decodeProof()
-> Verifier28x32.verify()
-> validateAndUpdateMerkleRoots()
-> processDepositsAndWithdrawals()
-> processBridgeCalls()
-> transferFee()
In processDepositsAndWithdrawals, when proofId == 2, it directly calls:
withdraw(publicValue, publicOwner, assetId)
withdraw() then sends ETH/ERC20 directly from the RollupProcessor balance.
The attacker submitted valid follow-up rollups to the deprecated processor and encoded withdrawals to their own address.
This incident involved legacy Aztec Connect funds that remained in an active rollup processor. It did not affect the current Aztec protocol.
We are investigating a potential exploit affecting Aztec Connect. ~$2.1m was transferred from the immutable smart contract in transaction:
etherscan.io/tx/0x074ec9317d…
Aztec Connect was deprecated 3 years ago. Aztec Labs holds no admin keys or control over the system; it cannot be paused or upgraded by us.
We will share further updates in due course.