El 1 de agosto de 2022, el puente Nomad fue drenado por aproximadamente $190 M en lo que inmediatamente se conoció como el primer "hackeo descentralizado" — una vez que el exploit fue público, cientos de direcciones se unieron copiando y pegando la transacción original y cambiando el destinatario.
Qué ocurrió
El contrato Replica de Nomad verificaba que la raíz Merkle de un mensaje hubiera sido previamente aceptada antes de permitir un retiro. Una actualización rutinaria inicializó el contrato con un committedRoot de 0x00 — pero la ruta de código que comprobaba las raíces aceptadas trataba el valor cero como "ya aceptado" en lugar de "no inicializado".
El resultado: cualquier mensaje cuya raíz Merkle se resolviera a 0x00 después del hashing era válido. Manipulando las hojas, un atacante podía crear un mensaje que retirara tokens arbitrarios. El atacante original usó esto para drenar WBTC.
La transacción era lo suficientemente simple como para que cualquiera que la viera en Etherscan pudiera cambiar la dirección del destinatario en calldata y reenviarla, retirando el siguiente lote de tokens disponible. Cientos de direcciones lo hicieron durante las siguientes horas.
Consecuencias
- Nomad pidió a todos los participantes que devolvieran fondos a una dirección de recuperación. Una fracción significativa fue devuelta — particularmente por direcciones que claramente se habían sumado oportunísticamente.
- El puente fue reconstruido con validación adecuada de raíz y continuó operando a capacidad reducida.
Por qué importa
Nomad es el ejemplo canónico de un bug de un carácter (0 frente a nonzero en un solo condicional) produciendo pérdidas catastróficas. También demostró cómo, en un mempool abierto, un exploit que no requiere sofisticación se extenderá a miles de participantes no relacionados en minutos.
Fuentes y evidencia on-chain
- [01]medium.comhttps://medium.com/nomad-xyz-blog/nomad-bridge-incident-update-aug-1-2022-66e85b3bf4f0
- [02]halborn.comhttps://www.halborn.com/blog/post/the-nomad-bridge-hack-a-deeper-dive