Análisis del incidente de ataque de reentrada de OrionProtocol
El 2 de febrero de 2023 a las 15:40:20 (hora UTC), OrionProtocol en Ethereum y Binance Smart Chain sufrió un ataque de reentrada debido a una vulnerabilidad en el contrato. El atacante logró robar aproximadamente 2.9 millones de dólares en fondos, que incluían 2,844,766 USDT en Ethereum y 191,606 BUSD en Binance Smart Chain.
Análisis del proceso de ataque
El atacante primero implementó un contrato de Token personalizado y realizó las operaciones de transferencia y autorización pertinentes, preparándose para el ataque posterior. Luego, el atacante tomó prestado a través de la función swap de Uniswap V2 y llamó al método ExchangeWithAtomic.swapThroughOrionPool de OrionProtocol para intercambiar tokens.
La ruta de intercambio se establece en [USDC, Token del atacante, USDT], donde el Token del atacante es clave. Durante el proceso de intercambio, debido a que este contrato de Token personalizado incluye una función de callback, el atacante puede activar el método ExchangeWithAtomic.depositAsset al transferir el Token, lo que permite el ataque de reentrada. Esto provoca que la cantidad depositada se acumule incorrectamente, y finalmente el atacante logra obtener beneficios a través de la operación de retiro.
Flujo de fondos
Los fondos iniciales del atacante provienen de la billetera caliente de una plataforma de intercambio. De los 1,651 ETH obtenidos en el ataque, 657.5 ETH aún 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 las funciones doSwapThroughOrionPool y _doSwapTokens del contrato ExchangeWithAtomic. Estas funciones actualizan la variable curBalance solo después de realizar la transferencia de tokens, lo que crea condiciones para un ataque de reentrada. El atacante logró activar la función depositAsset al agregar lógica de callback en la función transfer de un Token personalizado, lo que provocó que curBalance se actualizara incorrectamente. Finalmente, tras reembolsar el préstamo relámpago, el atacante extrajo fondos excesivos a través de la función withdraw.
Recomendaciones de prevención
Seguir el patrón "Comprobaciones- Efectos- Interacciones" (Checks-Effects-Interactions): actualizar el estado del contrato antes de realizar llamadas externas.
Usar un candado de reentrada: bloquear antes de comenzar una operación sensible y desbloquear al final, para prevenir la reentrada.
Considerar exhaustivamente varios tokens y rutas de intercambio: al diseñar la función de intercambio, es necesario tener en cuenta diversas situaciones y condiciones límite.
Límite de monto por transacción: establece un límite de transacción razonable para reducir las pérdidas potenciales.
Realizar auditorías de seguridad periódicas: contratar a un equipo de seguridad profesional para auditar exhaustivamente el contrato y detectar y corregir a tiempo las vulnerabilidades potenciales.
Implementar un mecanismo de firma múltiple: las operaciones clave requieren confirmación de múltiples partes, aumentando la dificultad de ataque.
Optimizar la lógica del código: Asegurarse de realizar llamadas externas solo después de actualizar las variables de estado clave.
Aumentar el mecanismo de respuesta de emergencia: elaborar un plan de emergencia completo que permita reaccionar rápidamente en caso de un ataque y minimizar las pérdidas.
Este evento resalta nuevamente la importancia de la seguridad en los contratos inteligentes. Los desarrolladores del proyecto deben mantenerse alerta en todo momento durante el proceso de desarrollo y adoptar medidas de seguridad integrales para proteger los activos de los usuarios y la reputación del proyecto. Al mismo tiempo, esto también recuerda a los inversores que deben elegir los proyectos con precaución, prestando atención a la seguridad del proyecto y a su fortaleza técnica.
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.
8 me gusta
Recompensa
8
6
Compartir
Comentar
0/400
TopBuyerBottomSeller
· hace4h
Ay, los contratos nunca decepcionan.
Ver originalesResponder0
ZenMiner
· 07-21 00:33
La seguridad del contrato también depende de la auditoría.
Ver originalesResponder0
DAOplomacy
· 07-21 00:30
otro fallo de gobernanza subóptimo smh...
Ver originalesResponder0
GweiTooHigh
· 07-21 00:24
Otro que toma a la gente por tonta
Ver originalesResponder0
DeFiAlchemist
· 07-21 00:22
*ajusta las gafas etéreas* otra alma cae a las oscuras artes de la reentrada... las barreras místicas del protocolo eran demasiado débiles
OrionProtocol sufrió un ataque de reentrada, se robaron 2.9 millones de dólares en fondos.
Análisis del incidente de ataque de reentrada de OrionProtocol
El 2 de febrero de 2023 a las 15:40:20 (hora UTC), OrionProtocol en Ethereum y Binance Smart Chain sufrió un ataque de reentrada debido a una vulnerabilidad en el contrato. El atacante logró robar aproximadamente 2.9 millones de dólares en fondos, que incluían 2,844,766 USDT en Ethereum y 191,606 BUSD en Binance Smart Chain.
Análisis del proceso de ataque
El atacante primero implementó un contrato de Token personalizado y realizó las operaciones de transferencia y autorización pertinentes, preparándose para el ataque posterior. Luego, el atacante tomó prestado a través de la función swap de Uniswap V2 y llamó al método ExchangeWithAtomic.swapThroughOrionPool de OrionProtocol para intercambiar tokens.
La ruta de intercambio se establece en [USDC, Token del atacante, USDT], donde el Token del atacante es clave. Durante el proceso de intercambio, debido a que este contrato de Token personalizado incluye una función de callback, el atacante puede activar el método ExchangeWithAtomic.depositAsset al transferir el Token, lo que permite el ataque de reentrada. Esto provoca que la cantidad depositada se acumule incorrectamente, y finalmente el atacante logra obtener beneficios a través de la operación de retiro.
Flujo de fondos
Los fondos iniciales del atacante provienen de la billetera caliente de una plataforma de intercambio. De los 1,651 ETH obtenidos en el ataque, 657.5 ETH aún 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 las funciones doSwapThroughOrionPool y _doSwapTokens del contrato ExchangeWithAtomic. Estas funciones actualizan la variable curBalance solo después de realizar la transferencia de tokens, lo que crea condiciones para un ataque de reentrada. El atacante logró activar la función depositAsset al agregar lógica de callback en la función transfer de un Token personalizado, lo que provocó que curBalance se actualizara incorrectamente. Finalmente, tras reembolsar el préstamo relámpago, el atacante extrajo fondos excesivos a través de la función withdraw.
Recomendaciones de prevención
Seguir el patrón "Comprobaciones- Efectos- Interacciones" (Checks-Effects-Interactions): actualizar el estado del contrato antes de realizar llamadas externas.
Usar un candado de reentrada: bloquear antes de comenzar una operación sensible y desbloquear al final, para prevenir la reentrada.
Considerar exhaustivamente varios tokens y rutas de intercambio: al diseñar la función de intercambio, es necesario tener en cuenta diversas situaciones y condiciones límite.
Límite de monto por transacción: establece un límite de transacción razonable para reducir las pérdidas potenciales.
Realizar auditorías de seguridad periódicas: contratar a un equipo de seguridad profesional para auditar exhaustivamente el contrato y detectar y corregir a tiempo las vulnerabilidades potenciales.
Implementar un mecanismo de firma múltiple: las operaciones clave requieren confirmación de múltiples partes, aumentando la dificultad de ataque.
Optimizar la lógica del código: Asegurarse de realizar llamadas externas solo después de actualizar las variables de estado clave.
Aumentar el mecanismo de respuesta de emergencia: elaborar un plan de emergencia completo que permita reaccionar rápidamente en caso de un ataque y minimizar las pérdidas.
Este evento resalta nuevamente la importancia de la seguridad en los contratos inteligentes. Los desarrolladores del proyecto deben mantenerse alerta en todo momento durante el proceso de desarrollo y adoptar medidas de seguridad integrales para proteger los activos de los usuarios y la reputación del proyecto. Al mismo tiempo, esto también recuerda a los inversores que deben elegir los proyectos con precaución, prestando atención a la seguridad del proyecto y a su fortaleza técnica.