Según la advertencia de seguridad del sistema SlowMist MistEye, el 7 de octubre de 2023, Stars Arena, el protocolo social de la cadena Avalanche, fue atacado, provocando una pérdida de aproximadamente 2,9 millones de dólares. El equipo de seguridad de SlowMist analizó brevemente el incidente del ataque y compartió los resultados de la siguiente manera.
Información relacionada
Dirección del atacante:
Contrato de ataque:
Transacción de ataque:
Núcleo de ataque
El atacante aprovecha la vulnerabilidad de reentrada para alterar el precio correspondiente a su participación en el depósito. Posteriormente, durante la venta, se produjo una manipulación similar del precio debido a la dependencia del cálculo del precio de la manipulación maliciosa. Al calcular con precisión el precio actualizado de las acciones al reingresar, el atacante roba fondos del contrato.
Análisis de transacciones
Podemos encontrar que hay una llamada reentrante en la transacción de ataque y analizamos gradualmente el método de llamada descompilando el código.
El atacante primero creó contratos de ataque (0x7f283 y 0xdd9af), llamado método 0xe9ccf3a3 de Stars Arena: contrato de acciones a través del contrato de ataque, y luego depositó 1 token AVAX.
Según el seguimiento paso a paso del código descompilado, el método 0xe9ccf3a3 utilizado por primera vez por el atacante es una función similar a un depósito, que llama a los métodos 0x326c y 0x2058. El método 0x326c es solo una llamada devuelta como parámetro, mientras que el método 0x2058 es similar a una función que maneja la compra o intercambio de un determinado token. Este método utiliza la cantidad del token AVAX y la dirección pasada en 0xe9ccf3a3 para realizar la siguiente operación. , cuota y cuota.calcular.
Siguiendo la lógica de llamada de la línea 92 del método 0x2058, podemos encontrar que el método 0x1a9b es una función de cálculo, el resultado calculado es un valor similar al precio y su valor de retorno es el v24 / 0xde0b6b3a7640000 o _initialPrice recién calculado.
Hay llamadas de bajo nivel en los métodos 0x307c y 0x30ef en las líneas 109, 110 y 116, y la llamada de 0x30ef sigue siendo una llamada externa a g1, que es la dirección del contrato de ataque entrante 0xdd9af. La función no tiene restricciones de bloqueo anti-reentrada y, después de ejecutar la llamada externa, este método ejecutará el juicio if posterior para actualizar los parámetros field0.length y field0. No hay duda de que aquí se produce la reentrada.
Veamos los datos construidos por el atacante en la llamada reentrante.
La llamada externa reentrante es el método 0x5632b2e4 y se pasan 4 parámetros construidos por el atacante. Estos parámetros se convierten a 91000000000 mediante conversión hexadecimal.
Como se mencionó anteriormente, la llamada externa al método 0x5632b2e4 se ejecuta antes del juicio if (g0 == _getMyShares[address(g1)][msg.sender]). En este momento, el valor de field0.lengt es 0 y no se ha actualizado. El atacante simplemente usó este método para eludir el juicio en el método 0x5632b2e4 y cambió los siguientes cuatro estados de parámetros de msg.sender, que es el contrato de ataque 0xdd9af, a los datos construidos cuando se realiza la llamada externa.
Tras las operaciones anteriores, el atacante llamó a sellShares para vender su acción y obtuvo 266.102,97278 AVAX.
Profundizando en la función sellShares, la función primero llamó al método 0x1a9b, y hubo una llamada en el método 0x2058 anterior, que es una función que maneja la compra o el intercambio de ciertos tokens. Podemos encontrar que el método 0x2329 en el método 0x1a9b actualizará el propietario _9f [g0] , y este parámetro se ha modificado a 91000000000 construido por el atacante durante el reingreso.
Regrese al método 0x1a9b y vuelva a calcular en función del valor construido previamente de forma maliciosa (consulte los comentarios para conocer el monto del cálculo).
Después del cálculo anterior, el precio correspondiente a la acción recién calculada ha cambiado y el resultado calculado es 274.333,061476814e18. Después de una serie de cobros de tarifas, el atacante utilizó una construcción maliciosa para manipular el precio sin modificar las acciones, las vendió y obtuvo ganancias con éxito.
Resumir
El núcleo de este ataque radica en la actualización de la dependencia del cálculo de precios causada por el ataque de reentrada, que a su vez conduce a una manipulación maliciosa de precios similar. El equipo de seguridad de SlowMist recomienda que la parte del proyecto haga todo lo posible para someterse a auditorías por parte de múltiples empresas de seguridad antes de implementar y liberar el contrato; al mismo tiempo, la especificación de codificación Checks-Effects-Interactions debe cumplirse tanto como sea posible al codificar. y se deberían agregar cerraduras anti-reentrada.
Ver originales
Esta página puede contener contenido de terceros, que se proporciona únicamente con fines informativos (sin garantías ni declaraciones) y no debe considerarse como un respaldo por parte de Gate a las opiniones expresadas ni como asesoramiento financiero o profesional. Consulte el Descargo de responsabilidad para obtener más detalles.
Slow Mist: Un breve análisis del hackeo de Stars Arena
fondo
Según la advertencia de seguridad del sistema SlowMist MistEye, el 7 de octubre de 2023, Stars Arena, el protocolo social de la cadena Avalanche, fue atacado, provocando una pérdida de aproximadamente 2,9 millones de dólares. El equipo de seguridad de SlowMist analizó brevemente el incidente del ataque y compartió los resultados de la siguiente manera.
Información relacionada
Dirección del atacante:
Contrato de ataque:
Transacción de ataque:
Núcleo de ataque
El atacante aprovecha la vulnerabilidad de reentrada para alterar el precio correspondiente a su participación en el depósito. Posteriormente, durante la venta, se produjo una manipulación similar del precio debido a la dependencia del cálculo del precio de la manipulación maliciosa. Al calcular con precisión el precio actualizado de las acciones al reingresar, el atacante roba fondos del contrato.
Análisis de transacciones
Podemos encontrar que hay una llamada reentrante en la transacción de ataque y analizamos gradualmente el método de llamada descompilando el código.
El atacante primero creó contratos de ataque (0x7f283 y 0xdd9af), llamado método 0xe9ccf3a3 de Stars Arena: contrato de acciones a través del contrato de ataque, y luego depositó 1 token AVAX.
Según el seguimiento paso a paso del código descompilado, el método 0xe9ccf3a3 utilizado por primera vez por el atacante es una función similar a un depósito, que llama a los métodos 0x326c y 0x2058. El método 0x326c es solo una llamada devuelta como parámetro, mientras que el método 0x2058 es similar a una función que maneja la compra o intercambio de un determinado token. Este método utiliza la cantidad del token AVAX y la dirección pasada en 0xe9ccf3a3 para realizar la siguiente operación. , cuota y cuota.calcular.
Siguiendo la lógica de llamada de la línea 92 del método 0x2058, podemos encontrar que el método 0x1a9b es una función de cálculo, el resultado calculado es un valor similar al precio y su valor de retorno es el v24 / 0xde0b6b3a7640000 o _initialPrice recién calculado.
Hay llamadas de bajo nivel en los métodos 0x307c y 0x30ef en las líneas 109, 110 y 116, y la llamada de 0x30ef sigue siendo una llamada externa a g1, que es la dirección del contrato de ataque entrante 0xdd9af. La función no tiene restricciones de bloqueo anti-reentrada y, después de ejecutar la llamada externa, este método ejecutará el juicio if posterior para actualizar los parámetros field0.length y field0. No hay duda de que aquí se produce la reentrada.
Veamos los datos construidos por el atacante en la llamada reentrante.
La llamada externa reentrante es el método 0x5632b2e4 y se pasan 4 parámetros construidos por el atacante. Estos parámetros se convierten a 91000000000 mediante conversión hexadecimal.
Como se mencionó anteriormente, la llamada externa al método 0x5632b2e4 se ejecuta antes del juicio if (g0 == _getMyShares[address(g1)][msg.sender]). En este momento, el valor de field0.lengt es 0 y no se ha actualizado. El atacante simplemente usó este método para eludir el juicio en el método 0x5632b2e4 y cambió los siguientes cuatro estados de parámetros de msg.sender, que es el contrato de ataque 0xdd9af, a los datos construidos cuando se realiza la llamada externa.
Tras las operaciones anteriores, el atacante llamó a sellShares para vender su acción y obtuvo 266.102,97278 AVAX.
Profundizando en la función sellShares, la función primero llamó al método 0x1a9b, y hubo una llamada en el método 0x2058 anterior, que es una función que maneja la compra o el intercambio de ciertos tokens. Podemos encontrar que el método 0x2329 en el método 0x1a9b actualizará el propietario _9f [g0] , y este parámetro se ha modificado a 91000000000 construido por el atacante durante el reingreso.
Regrese al método 0x1a9b y vuelva a calcular en función del valor construido previamente de forma maliciosa (consulte los comentarios para conocer el monto del cálculo).
Después del cálculo anterior, el precio correspondiente a la acción recién calculada ha cambiado y el resultado calculado es 274.333,061476814e18. Después de una serie de cobros de tarifas, el atacante utilizó una construcción maliciosa para manipular el precio sin modificar las acciones, las vendió y obtuvo ganancias con éxito.
Resumir
El núcleo de este ataque radica en la actualización de la dependencia del cálculo de precios causada por el ataque de reentrada, que a su vez conduce a una manipulación maliciosa de precios similar. El equipo de seguridad de SlowMist recomienda que la parte del proyecto haga todo lo posible para someterse a auditorías por parte de múltiples empresas de seguridad antes de implementar y liberar el contrato; al mismo tiempo, la especificación de codificación Checks-Effects-Interactions debe cumplirse tanto como sea posible al codificar. y se deberían agregar cerraduras anti-reentrada.