Os primeiros dois exploits conhecidos contra circuitos ZK ao vivo acabaram de acontecer, e não foram bugs sutis de subcondicionamento. Foram verificadores Groth16 implementados sem completar a cerimônia de configuração confiável. Um foi resgatado por um hacker ético por cerca de ~$1.5M, o outro drenado por 5 ETH. 🧵
Ambos os protocolos usaram Circom + snarkjs, a pilha mais comum para implementações Groth16. O erro? Eles pularam a Fase 2 da configuração confiável: a etapa de contribuição específica do circuito. Sem isso, os parâmetros γ e δ da chave de verificação são ambos definidos para o mesmo valor: os gens de G2.
Por que γ = δ quebra tudo? Verificações de Groth16: e(-A, B) · e(α, β) · e(vk_x, γ) · e(C, δ) = 1 Quando γ = δ, um atacante pode definir C = -vk_x para cancelar ambos os termos, depois definir A = α, B = β para cancelar o resto. A equação se torna 1 · 1 = 1. Nenhuma testemunha necessária.
O Foom Protocol (~$1.4M) era uma dApp de loteria na Base e Ethereum. Um resgate de whitehat por @duha_real e outro whitehat independente drenaram os contratos antes que um ator malicioso pudesse, utilizando provas forjadas para extrair 99.97–99.99% dos tokens.
O Veil Protocol (~$5K) foi um fork do Tornado Cash na Base. Um atacante drenou toda a pool em uma transação, 29 retiradas forjadas usando anuladores fictícios como 0xdead0000, extraindo o saldo total de 2.9 ETH da pool.
Isto é o snarkjs a funcionar como previsto. Quando você executa o setup do groth16, ele inicializa γ e δ para o gerador G2 como um espaço reservado. Espera-se que você execute zkey contribute para randomizar δ. Pule essa etapa, e seu verificador aceitará qualquer prova.
A parte assustadora: isto não foi uma falha criptográfica profunda ou um bug sutil no circuito. Foi um erro de implementação: faltava um comando CLI. E ficou em produção com fundos reais em risco.
conclusões: - Revise sempre os scripts de implantação, não apenas o código do circuito - Verifique suas chaves de verificação: se vk_gamma_2 == vk_delta_2, suas provas são forjáveis - Trabalhamos com @DedaubSecurity para escanear cadeias EVM em busca de outros contratos afetados, nenhum de alto valor encontrado, mas alguns existem
4,08K