El 23 de julio de 2022, la plataforma descentralizada de streaming de música Audius perdió 18,56 millones de tokens AUDIO — valorados en aproximadamente 6,05 millones de dólares en ese momento — cuando un atacante explotó una vulnerabilidad en el código de inicialización del contrato de gobernanza del protocolo. El bug había estado presente a través de dos auditorías separadas por OpenZeppelin.
Qué ocurrió
Audius usaba contratos de gobernanza actualizables que dependían de funciones inicializadoras para establecer su estado crítico en el momento del despliegue. Las funciones de inicialización estaban destinadas a ser de un solo disparo — invocables exactamente una vez, por el desplegador del contrato, inmediatamente después del despliegue.
El bug: el inicializador para uno de los contratos de gobernanza era invocable repetidamente bajo condiciones específicas. El atacante lo re-invocó para tomar el control del estado del contrato, incluyendo el almacenamiento de delegación y staking que determinaba quién tenía poder de voto de gobernanza.
Con control del almacenamiento, el atacante:
- Re-definió su dirección como poseedora de 10 billones de AUDIO en poder de voto delegado.
- Envió una propuesta de gobernanza maliciosa que retiraba toda la tesorería de la comunidad a una wallet controlada por el atacante.
- Votó sí en su propia propuesta con el poder de voto fabricado de 10 billones.
- El primer intento falló debido a un problema separado; el segundo intento tuvo éxito.
- Ejecutó la propuesta, transfiriendo 18.564.497 AUDIO fuera de la tesorería, luego los intercambió en Uniswap por 704 ETH (~$1,09M). Los tokens restantes perdieron la mayor parte de su valor cuando el mercado descontó la dilución.
Consecuencias
- Audius detectó el exploit aproximadamente 30 minutos después del primer intento fallido y desplegó una corrección en una hora.
- El equipo publicó un post-mortem y reembolsó a los titulares de tokens afectados mediante una combinación de reestructuración de tesorería y ajustes de suministro de tokens.
- Los contratos habían sido auditados por OpenZeppelin dos veces; ninguna auditoría detectó el bug del inicializador re-invocable.
Por qué importa
Audius es el caso canónico de por qué las funciones inicializadoras son primitivas peligrosas. El patrón se repite en todo el ecosistema de proxy actualizable:
- Parity Multisig (2017) — un
initWalletre-invocable permitió tanto el robo original de $30M como el posterior congelamiento de $150M. - Audius (2022) — misma causa raíz, diferente arquitectura de contrato, pérdida de $6M.
- El patrón sigue apareciendo porque la implementación segura (modificador
initializer, comprobaciones explícitas de propiedad, despliegue + inicialización atómicos) está a una anotación extra de la insegura.
La lección más profunda de Audius es más incómoda: dos auditorías de una firma de primer nivel no detectaron este bug. Las auditorías proporcionan protección significativa pero no absoluta; la verificación formal de los patrones de inicialización y el fuzzing de invariantes económicos de los contratos de gobernanza son las capas defensivas adicionales que se han vuelto más comunes desde entonces.
Fuentes y evidencia on-chain
- [01]decrypt.cohttps://decrypt.co/105913/how-audius-was-hacked-6m-ethereum-tokens
- [02]cryptoslate.comhttps://cryptoslate.com/attackers-stole-6-million-from-audius-by-exploiting-a-bug-in-the-contract/
- [03]bleepingcomputer.comhttps://www.bleepingcomputer.com/news/security/hackers-steal-6-million-from-blockchain-music-platform-audius/