Análisis profundo de la pérdida de 2.9 millones de dólares por un ataque de reentrada a OrionProtocol

robot
Generación de resúmenes en curso

Análisis del incidente de ataque de reentrada de OrionProtocol

El 2 de febrero de 2023 por la tarde, el proyecto OrionProtocol en Ethereum y Binance Smart Chain sufrió un ataque de reingreso debido a una vulnerabilidad en el contrato. El atacante robó aproximadamente 2.84 millones de USDT de la cadena de Ethereum y aproximadamente 190,000 BUSD de la cadena de Binance Smart, con una pérdida total de aproximadamente 2.9 millones de dólares.

Análisis del proceso de ataque

El atacante primero desplegó un contrato de Token personalizado y realizó una serie de preparativos. Luego, el atacante tomó prestados fondos a través de la función de swap de algún DEX, llamando al método ExchangeWithAtomic.swapThroughOrionPool de OrionProtocol para intercambiar tokens. La ruta de intercambio incluía la dirección del contrato de Token creado por el atacante.

Durante el proceso de intercambio, un atacante aprovechó la función de callback del contrato del Token personalizado, llamando repetidamente al método ExchangeWithAtomic.depositAsset, lo que provocó que el monto del depósito se acumulase múltiples veces. Finalmente, el atacante completó su ganancia a través de la operación de retiro.

Análisis de ataque de reentrada de OrionProtocol con PoC

Flujo de capital

Según el seguimiento, los fondos iniciales del atacante provienen de la billetera caliente de una plataforma de intercambio. De los 1651 ETH obtenidos en el ataque, aproximadamente 657.5 aún permanecen en la dirección de la billetera del atacante, mientras que el resto ha sido transferido a través de servicios de mezclado.

Análisis de ataque de reentrada de OrionProtocol con PoC

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 de tokens, lo que crea una oportunidad para que un atacante realice una reentrada. El atacante agrega lógica de callback en la función transfer de un Token personalizado, llamando repetidamente a la función depositAsset, lo que lleva a una actualización incorrecta de curBalance.

El atacante aprovechó esta vulnerabilidad para retirar con éxito fondos en exceso después de devolver el préstamo relámpago.

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

Reproducción del ataque

Los investigadores proporcionaron parte del código PoC, simulando el proceso de ataque. El código incluye pasos como la creación de un Token personalizado, el establecimiento de un grupo de liquidez, la autorización de operaciones y la ejecución del ataque. Los resultados de las pruebas mostraron que el ataque se reprodujo con éxito, coincidiendo con los resultados de la pila de llamadas del ataque real.

Análisis de ataque de reingreso de OrionProtocol con PoC

Análisis de ataques de reentrada de OrionProtocol con PoC

Análisis de ataque de reingreso de OrionProtocol con PoC

Análisis de ataque de reentrada de OrionProtocol con PoC

Análisis de ataque por reingreso de OrionProtocol con PoC

Análisis de ataque de reentrada de OrionProtocol con PoC

Consejos de seguridad

  1. En el diseño de contratos, se deben considerar los posibles riesgos de seguridad que pueden surgir de múltiples tokens y rutas de intercambio.

  2. Seguir el patrón de codificación "Checks-Effects-Interactions", es decir, primero realizar la verificación de condiciones, luego actualizar las variables de estado y finalmente interactuar con contratos externos.

  3. Debe tener especial cuidado al manejar llamadas externas, especialmente en operaciones que involucran transferencias de fondos.

  4. Realizar auditorías de seguridad periódicas para identificar y reparar vulnerabilidades potenciales de manera oportuna.

  5. Implementar un control de permisos y un mecanismo de límites razonables para reducir las pérdidas que podría causar un ataque único.

Este evento recuerda nuevamente a los equipos de desarrollo de proyectos Web3 que, al perseguir la innovación, deben prestar especial atención a la seguridad de los contratos inteligentes. Solo construyendo infraestructuras más seguras y confiables se puede promover el desarrollo saludable de toda la industria.

TOKEN0.71%
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
  • 8
  • Republicar
  • Compartir
Comentar
0/400
ShadowStakervip
· 07-08 21:29
otro día, otro exploit de defi... ¿cuándo aprenderán los desarrolladores a verificar la reentrada smh
Ver originalesResponder0
TokenTherapistvip
· 07-07 15:54
Otro más que ha caído.
Ver originalesResponder0
GasWastervip
· 07-06 14:26
Otra vez me han robado.
Ver originalesResponder0
SigmaBrainvip
· 07-05 22:13
Otra vez un ataque de reentrada, parece que han sido vulnerados.
Ver originalesResponder0
ponzi_poetvip
· 07-05 22:13
¿Y la seguridad? ¿A dónde fue?
Ver originalesResponder0
GetRichLeekvip
· 07-05 22:13
Los de adelante están comiendo sandía. No pueden ni hacer una auditoría de contratos. Están perdiendo mucho.
Ver originalesResponder0
BearMarketGardenervip
· 07-05 22:07
El contrato volvió a fallar, ay.
Ver originalesResponder0
DaoGovernanceOfficervip
· 07-05 22:00
*sigh* empíricamente hablando, el 99% de estos hacks provienen de descuidos básicos en la gestión del estado...
Ver originalesResponder0
  • Anclado
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)