- Los contratos de Audius en la red principal de Ethereum se vieron comprometidos debido a un error en el código de inicialización del contrato.
- Este error hizo posible que el atacante transfiriera alrededor de 18 millones de tokens de AUDIO.
- Hubo invocaciones repetidas de cualquiera de las funciones que usaban el modificador ‘inicializador’.
El informe post-mortem sobre la adquisición de Audius Governance fue al corriente en el sitio web del Blog de Audius el 24 de julio. Según la publicación del blog, “los contratos de gobierno, participación y delegación de Audius en la red principal de Ethereum se vieron comprometidos debido a un error en el código de inicialización del contrato que permitió invocaciones repetidas de las funciones de inicialización”.
Este error hizo posible que el atacante tomara alrededor de 18 millones de tokens de AUDIO en poder del contrato de gobierno de Audius en el tesoro de la comunidad. Estos tokens luego se transfirieron a una billetera bajo el control del atacante, de la cual modificó la dinámica del sistema de votación para cambiar sus montos de AUDIO apostados.
Los contratos de gobierno de Audius utilizan lo que se conoce como el patrón de actualización de proxy de OpenZeppelin, que permite actualizaciones de proxy a los contratos lógicos del sistema de gobierno de Audius. Cuando se implementa, AudiusAdminUpgradabilityProxy utiliza la ranura de almacenamiento 0.
Por otro lado, el administrador de proxy para el protocolo Audius se configuró en el servidor de gobierno que implementa una variedad de controles de saldos para evitar cualquier uso no autorizado.
“Esto provocó una colisión con el estado booleano inicializado e inicializado del contrato Initializable de OpenZeppelin, que también se almacenan en la ranura 0 (el primer y segundo byte)”, se lee en el blog.
Según el informe de la autopsia, “debido a que la inicialización ya era cierta, la llamada no se consideró una ‘llamada de nivel superior’, lo que significaba que tanto ‘inicializado’ como ‘inicializando’ no se modificaron”.
Esto es lo que condujo a las invocaciones repetidas de cualquiera de las funciones que usaban el modificador ‘inicializador’.
Al final del ataque, el pirata informático pudo redefinir la votación en el protocolo Audius y modificar las direcciones de los guardianes del contrato de gobierno. También pudieron establecer la dirección de gobierno para los contratos V2 de Staking y Delegate Manager en la del contrato de gobierno de Audius.