Incidents

Payy exploit: forged ZK proof, fix public 73 days

Illustration: ZK verifier bug

Published Oct 13, 2026

Project
Payy Network
Chain
Ethereum
Date
Sep 24, 2026
Loss
$1.92M
Class
ZK verifier bug
Basis
Project post-mortem or audit firm analysis

Payy's rollup contract paid out USDC when shown a valid proof that funds had been burned on the rollup. On September 24, 2026 an attacker submitted three such proofs for burns that never happened and withdrew 1,918,793 USDC.

The proofs were forged through a bug in the Barretenberg verifier. A sub-protocol checked a running sum but did not force that sum to start at zero, which, in the words of the upstream fix, left "one degree of freedom" to a malicious prover. The rollup contract also did not require the burn hash to be non-zero. The exact way the proof was built has not been published.

The fix landed in the Aztec repository on May 14, 2026 (commit 58bf73a, "small subgroup ipa bug") and shipped in Barretenberg v5.0.0 on July 13, 73 days before the attack. Payy's verifier, deployed on May 15, was built from an October 2025 version. Payy has ruled out key leaks, social engineering and infrastructure compromise.

How to protect your protocol

Sources

How this was prepared: compiled from the sources above with the help of automated tools, then reviewed by the Foothold security team before publication.

Give Atlant a task Could the same thing happen in your code? Get it checked →