Análisis del incidente de ataque de reentrada de OrionProtocol
El 2 de febrero de 2023 a las 15:40:20 UTC, el contrato de OrionProtocol en Ethereum y Binance Smart Chain fue atacado por reentrada debido a una vulnerabilidad. Los atacantes obtuvieron ganancias de 2,844,766 USDT en la cadena de Ethereum y 191,606 BUSD en la cadena de Binance Smart, con un total de aproximadamente 2.9 millones de dólares.
Análisis del proceso de ataque
El atacante primero implementó un contrato de Token personalizado y realizó las operaciones de transferencia y autorización correspondientes, preparándose para el ataque posterior.
Luego, el atacante realiza un préstamo a través del método swap de un DEX y llama al método ExchangeWithAtomic.swapThroughOrionPool de OrionProtocol para intercambiar tokens. La ruta de intercambio se establece en [USDC, Token del atacante, USDT].
Durante el proceso de intercambio, debido a la lógica de llamada de retorno contenida en el contrato Token creado por el atacante, se desencadena una llamada recursiva al método ExchangeWithAtomic.depositAsset durante la operación de Transfer, lo que provoca que el monto del depósito se acumule varias veces. Al final, el atacante completa la obtención de ganancias a través de la operación de retiro.
Flujo de fondos
Los fondos iniciales del atacante provienen de la cuenta de la billetera caliente de una plataforma de intercambio. De los 1,651 ETH obtenidos, 657.5 ETH aún permanecen en la dirección de la billetera del atacante, mientras que el resto se ha transferido a través de un servicio de mezcla.
Análisis de vulnerabilidades
El problema central radica en la función doSwapThroughOrionPool del contrato ExchangeWithAtomic. Esta función actualiza la variable curBalance después de realizar la transferencia del Token, lo que crea condiciones propicias para un ataque de reentrada. El atacante aprovecha la función de transferencia del Token personalizado para llamar al método depositAsset, lo que provoca una actualización incorrecta de curBalance. Finalmente, después de reembolsar el préstamo relámpago, el atacante extrajo fondos en exceso a través de la función withdraw.
Sugerencias de seguridad
En el diseño del contrato se deben considerar los riesgos de seguridad que pueden surgir de múltiples tokens y rutas de intercambio.
Seguir el patrón "Checks-Effects-Interactions"(Checks-Effects-Interactions) al escribir el código del contrato, es decir, primero realizar la verificación de condiciones, luego actualizar las variables de estado y finalmente ejecutar las llamadas externas.
Implementar un candado de reentrada en funciones clave para prevenir ataques de reentrada.
Para los contratos de Token que son llamados externamente, se debe llevar a cabo una auditoría de seguridad estricta y una gestión de lista blanca.
Realizar auditorías de seguridad de contratos de forma regular para detectar y corregir a tiempo posibles vulnerabilidades.
Al tomar estas medidas, se puede reducir eficazmente el riesgo de ataques a los contratos inteligentes y mejorar la seguridad general del proyecto.
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.
12 me gusta
Recompensa
12
5
Compartir
Comentar
0/400
DevChive
· hace9h
Otra máquina de tomar a la gente por tonta se ha enfriado.
Ver originalesResponder0
GasWaster
· hace9h
Otra máquina de tomar a la gente por tonta está condenada
Ver originalesResponder0
SleepTrader
· hace9h
Otra vez tomar a la gente por tonta.
Ver originalesResponder0
BearMarketLightning
· hace10h
Otra vez me han dado cupones de clip.
Ver originalesResponder0
DoomCanister
· hace10h
Otra vez es el viejo problema de los contratos inteligentes.
OrionProtocol sufrió un ataque de reentrada con una pérdida de 2.9 millones de dólares
Análisis del incidente de ataque de reentrada de OrionProtocol
El 2 de febrero de 2023 a las 15:40:20 UTC, el contrato de OrionProtocol en Ethereum y Binance Smart Chain fue atacado por reentrada debido a una vulnerabilidad. Los atacantes obtuvieron ganancias de 2,844,766 USDT en la cadena de Ethereum y 191,606 BUSD en la cadena de Binance Smart, con un total de aproximadamente 2.9 millones de dólares.
Análisis del proceso de ataque
El atacante primero implementó un contrato de Token personalizado y realizó las operaciones de transferencia y autorización correspondientes, preparándose para el ataque posterior.
Luego, el atacante realiza un préstamo a través del método swap de un DEX y llama al método ExchangeWithAtomic.swapThroughOrionPool de OrionProtocol para intercambiar tokens. La ruta de intercambio se establece en [USDC, Token del atacante, USDT].
Durante el proceso de intercambio, debido a la lógica de llamada de retorno contenida en el contrato Token creado por el atacante, se desencadena una llamada recursiva al método ExchangeWithAtomic.depositAsset durante la operación de Transfer, lo que provoca que el monto del depósito se acumule varias veces. Al final, el atacante completa la obtención de ganancias a través de la operación de retiro.
Flujo de fondos
Los fondos iniciales del atacante provienen de la cuenta de la billetera caliente de una plataforma de intercambio. De los 1,651 ETH obtenidos, 657.5 ETH aún permanecen en la dirección de la billetera del atacante, mientras que el resto se ha transferido a través de un servicio de mezcla.
Análisis de vulnerabilidades
El problema central radica en la función doSwapThroughOrionPool del contrato ExchangeWithAtomic. Esta función actualiza la variable curBalance después de realizar la transferencia del Token, lo que crea condiciones propicias para un ataque de reentrada. El atacante aprovecha la función de transferencia del Token personalizado para llamar al método depositAsset, lo que provoca una actualización incorrecta de curBalance. Finalmente, después de reembolsar el préstamo relámpago, el atacante extrajo fondos en exceso a través de la función withdraw.
Sugerencias de seguridad
En el diseño del contrato se deben considerar los riesgos de seguridad que pueden surgir de múltiples tokens y rutas de intercambio.
Seguir el patrón "Checks-Effects-Interactions"(Checks-Effects-Interactions) al escribir el código del contrato, es decir, primero realizar la verificación de condiciones, luego actualizar las variables de estado y finalmente ejecutar las llamadas externas.
Implementar un candado de reentrada en funciones clave para prevenir ataques de reentrada.
Para los contratos de Token que son llamados externamente, se debe llevar a cabo una auditoría de seguridad estricta y una gestión de lista blanca.
Realizar auditorías de seguridad de contratos de forma regular para detectar y corregir a tiempo posibles vulnerabilidades.
Al tomar estas medidas, se puede reducir eficazmente el riesgo de ataques a los contratos inteligentes y mejorar la seguridad general del proyecto.