Los dos primeros exploits conocidos contra circuitos ZK en vivo simplemente ocurrieron, y no fueron bugs sutiles y poco restringidos. Eran verificadores Groth16 desplegados sin completar la ceremonia de configuración confiable. Uno fue rescatado por un tipo de sombrero blanco por ~1,5 millones de dólares, el otro drenado por 5 ETH. 🧵
Ambos protocolos usaban Circom + snarkjs, la pila más común para despliegues de Groth16. ¿El bicho? Saltaron la Fase 2 de la configuración confiable: el paso de contribución específico del circuito. Sin ella, los parámetros de la clave de verificación γ y δ se establecen al mismo valor: los generadores G2
¿Por qué γ = δ lo rompe todo? Comprobaciones de verificación de Groth16: e(-A, B) · e(α, β) · e(vk_x, γ) · e(C, δ) = 1 Cuando γ = δ, un atacante puede configurar C = -vk_x para cancelar ambos términos, luego fijar A = α, B = β para cancelar el resto. La ecuación se convierte en 1 · 1 = 1. No hace falta testigo.
El Protocolo Foom (~$1,4M) era una dApp de lotería en Base y Ethereum. Un rescate de whitehat por parte de @duha_real y otro whitehat independiente agotó los contratos antes de que un actor malicioso pudiera hacerlo, simulando pruebas falsificadas para extraer entre el 99,97 y el 99,99% de los tokens.
El Protocolo Veil (~5.000 dólares) fue una bifurcación de Tornado Cash en la base. Un atacante vació todo el pool en una sola transacción, 29 retiradas falsificadas usando anuladores ficticios como 0xdead0000, extrayendo el saldo completo de 2,9 ETH del pool.
Esto es snarkjs funcionando tal y como está diseñado. Cuando ejecutas la configuración de groth16, se inicializa γ y δ al generador G2 como un marcador de posición. Se espera que ejecutes zkey contribute para aleatorizar δ. Si te saltas ese paso, tu verificador acepta cualquier prueba.
Lo más aterrador: esto no era un fallo criptográfico profundo ni un error sutil en el circuito. Fue un error de despliegue: faltar un comando CLI. Y se quedó en producción con fondos reales en riesgo.
Conclusiones: - Revisar siempre los scripts de despliegue, no solo el código de circuito - Revisa tus claves de verificación: si vk_gamma_2 == vk_delta_2, tus pruebas son falsificables - Trabajamos con @DedaubSecurity para escanear cadenas de EVM en busca de otros contratos afectados, no se encontraron contratos de alto valor, pero algunos existen
4.07K