OrionProtocol sufrió un ataque de reentrada, se robaron 2.9 millones de dólares en fondos.

robot
Generación de resúmenes en curso

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 de ataque de reentrada de OrionProtocol con PoC

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.

Análisis de ataque de reentrada de OrionProtocol con PoC

Análisis de ataque de reingreso de OrionProtocol con PoC

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 ataque de reentrada de OrionProtocol con PoC

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.

Análisis de ataque de reingreso de OrionProtocol con PoC

Análisis de ataque de reentrada de OrionProtocol con PoC

Análisis de ataques de reentrada de OrionProtocol con PoC

Análisis de ataque de reentrada de OrionProtocol con PoC

Análisis de ataque de reentrada de OrionProtocol con PoC

Análisis de ataque de reentrada de OrionProtocol con PoC

Análisis de ataque de reentrada de OrionProtocol con PoC

Recomendaciones de prevención

  1. Seguir el patrón "Comprobaciones- Efectos- Interacciones" (Checks-Effects-Interactions): actualizar el estado del contrato antes de realizar llamadas externas.

  2. Usar un candado de reentrada: bloquear antes de comenzar una operación sensible y desbloquear al final, para prevenir la reentrada.

  3. 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.

  4. Límite de monto por transacción: establece un límite de transacción razonable para reducir las pérdidas potenciales.

  5. 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.

  6. Implementar un mecanismo de firma múltiple: las operaciones clave requieren confirmación de múltiples partes, aumentando la dificultad de ataque.

  7. Optimizar la lógica del código: Asegurarse de realizar llamadas externas solo después de actualizar las variables de estado clave.

  8. 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.

TOKEN-1.21%
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.
  • Recompensa
  • 6
  • Compartir
Comentar
0/400
TopBuyerBottomSellervip
· hace4h
Ay, los contratos nunca decepcionan.
Ver originalesResponder0
ZenMinervip
· 07-21 00:33
La seguridad del contrato también depende de la auditoría.
Ver originalesResponder0
DAOplomacyvip
· 07-21 00:30
otro fallo de gobernanza subóptimo smh...
Ver originalesResponder0
GweiTooHighvip
· 07-21 00:24
Otro que toma a la gente por tonta
Ver originalesResponder0
DeFiAlchemistvip
· 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
Ver originalesResponder0
PessimisticLayervip
· 07-21 00:08
¿300w más? Es un asunto fácil.
Ver originalesResponder0
Opere con criptomonedas en cualquier momento y lugar
qrCode
Escanee para descargar la aplicación Gate
Comunidad
Español
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)