Análisis del incidente de ataque de reentrada de OrionProtocol
El 2 de febrero de 2023 por la tarde, el proyecto Orion Protocol en Ethereum y Binance Smart Chain sufrió un ataque de reentrada debido a una vulnerabilidad en el contrato. Los atacantes obtuvieron un beneficio total de aproximadamente 2,9 millones de dólares, que incluía 2,844,766 USDT en la cadena de Ethereum y 191,606 BUSD en la cadena de Binance Smart.
Análisis del proceso de ataque
El atacante primero desplegó un contrato de Token personalizado y realizó una serie de operaciones de transferencia y autorización para preparar el ataque posterior. Luego, el atacante tomó un préstamo a través de la función de intercambio de algún DEX y llamó al método ExchangeWithAtomic.swapThroughOrionPool de OrionProtocol para intercambiar tokens. La ruta de intercambio se estableció en [USDC, Token del atacante, USDT].
Al ejecutar el método swapThroughOrionPool, se desencadenó un ataque de reentrada debido a que el contrato Token del atacante incluye una función de callback, lo que provocó que durante el proceso de transferencia se activara el ataque. El atacante utilizó el método Token.Transfer para llamar repetidamente a la función ExchangeWithAtomic.depositAsset, acumulando así el monto del depósito. Finalmente, el atacante completó su ganancia mediante una operación de retiro.
Flujo de fondos
Según los datos en cadena, los fondos iniciales del atacante provienen de la billetera caliente de una plataforma de intercambio. De los 1,651 ETH obtenidos, 657.5 todavía permanecen en la dirección de la billetera del atacante, mientras que el resto ha sido transferido a través de un servicio de mezcla.
Análisis de vulnerabilidades
El núcleo de la vulnerabilidad radica en la función doSwapThroughOrionPool del contrato ExchangeWithAtomic. Esta función presenta un defecto lógico al ejecutar la operación _doSwapTokens. En concreto, el código actualiza la variable curBalance solo después de realizar la transferencia, lo que crea condiciones para un ataque de reentrada.
El atacante agrega lógica de devolución de llamada en la función transfer de un Token personalizado y llama repetidamente a la función depositAsset, lo que provoca una actualización incorrecta de curBalance. Finalmente, después de reembolsar el préstamo relámpago, el atacante llama a la función withdraw para retirar fondos excesivos.
Sugerencias de prevención
Para evitar ataques similares, el equipo del proyecto debe prestar atención a los siguientes puntos:
Al implementar la función de intercambio de tokens, es necesario considerar de manera integral los posibles riesgos de seguridad que pueden surgir de los diferentes tipos de tokens y rutas de intercambio.
Seguir estrictamente el patrón de codificación "Checks-Effects-Interactions"(Checks-Effects-Interactions), es decir, primero realizar la verificación de condiciones, luego actualizar las variables de estado y finalmente ejecutar las llamadas externas.
Mejorar el control de seguridad sobre las llamadas externas, especialmente al manejar tokens personalizados por el usuario.
Realizar auditorías de código y pruebas de seguridad de forma regular para detectar y corregir vulnerabilidades potenciales a tiempo.
Utilizar bibliotecas de seguridad maduras y mejores prácticas, como SafeERC20 de OpenZeppelin.
Al tomar estas medidas, se puede reducir significativamente 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.
11 me gusta
Recompensa
11
6
Republicar
Compartir
Comentar
0/400
ser_ngmi
· hace20h
Otra vez sin dinero.
Ver originalesResponder0
PretendingToReadDocs
· hace21h
Todos los días hay problemas, ¿qué más se puede hacer?
Ver originalesResponder0
LiquidityWizard
· hace21h
Rug Pull预定~
Ver originalesResponder0
degenonymous
· hace21h
tontos otra vez han sido tomados por tontos
Ver originalesResponder0
CountdownToBroke
· hace21h
Otro que ha explotado
Ver originalesResponder0
BoredApeResistance
· hace21h
Otra vez vulnerabilidad de contrato, se ha comido demasiado.
OrionProtocol sufrió un ataque de reentrada, con pérdidas de aproximadamente 2.9 millones de dólares.
Análisis del incidente de ataque de reentrada de OrionProtocol
El 2 de febrero de 2023 por la tarde, el proyecto Orion Protocol en Ethereum y Binance Smart Chain sufrió un ataque de reentrada debido a una vulnerabilidad en el contrato. Los atacantes obtuvieron un beneficio total de aproximadamente 2,9 millones de dólares, que incluía 2,844,766 USDT en la cadena de Ethereum y 191,606 BUSD en la cadena de Binance Smart.
Análisis del proceso de ataque
El atacante primero desplegó un contrato de Token personalizado y realizó una serie de operaciones de transferencia y autorización para preparar el ataque posterior. Luego, el atacante tomó un préstamo a través de la función de intercambio de algún DEX y llamó al método ExchangeWithAtomic.swapThroughOrionPool de OrionProtocol para intercambiar tokens. La ruta de intercambio se estableció en [USDC, Token del atacante, USDT].
Al ejecutar el método swapThroughOrionPool, se desencadenó un ataque de reentrada debido a que el contrato Token del atacante incluye una función de callback, lo que provocó que durante el proceso de transferencia se activara el ataque. El atacante utilizó el método Token.Transfer para llamar repetidamente a la función ExchangeWithAtomic.depositAsset, acumulando así el monto del depósito. Finalmente, el atacante completó su ganancia mediante una operación de retiro.
Flujo de fondos
Según los datos en cadena, los fondos iniciales del atacante provienen de la billetera caliente de una plataforma de intercambio. De los 1,651 ETH obtenidos, 657.5 todavía permanecen en la dirección de la billetera del atacante, mientras que el resto ha sido transferido a través de un servicio de mezcla.
Análisis de vulnerabilidades
El núcleo de la vulnerabilidad radica en la función doSwapThroughOrionPool del contrato ExchangeWithAtomic. Esta función presenta un defecto lógico al ejecutar la operación _doSwapTokens. En concreto, el código actualiza la variable curBalance solo después de realizar la transferencia, lo que crea condiciones para un ataque de reentrada.
El atacante agrega lógica de devolución de llamada en la función transfer de un Token personalizado y llama repetidamente a la función depositAsset, lo que provoca una actualización incorrecta de curBalance. Finalmente, después de reembolsar el préstamo relámpago, el atacante llama a la función withdraw para retirar fondos excesivos.
Sugerencias de prevención
Para evitar ataques similares, el equipo del proyecto debe prestar atención a los siguientes puntos:
Al implementar la función de intercambio de tokens, es necesario considerar de manera integral los posibles riesgos de seguridad que pueden surgir de los diferentes tipos de tokens y rutas de intercambio.
Seguir estrictamente el patrón de codificación "Checks-Effects-Interactions"(Checks-Effects-Interactions), es decir, primero realizar la verificación de condiciones, luego actualizar las variables de estado y finalmente ejecutar las llamadas externas.
Mejorar el control de seguridad sobre las llamadas externas, especialmente al manejar tokens personalizados por el usuario.
Realizar auditorías de código y pruebas de seguridad de forma regular para detectar y corregir vulnerabilidades potenciales a tiempo.
Utilizar bibliotecas de seguridad maduras y mejores prácticas, como SafeERC20 de OpenZeppelin.
Al tomar estas medidas, se puede reducir significativamente el riesgo de ataques a los contratos inteligentes y mejorar la seguridad general del proyecto.