La vulnerabilidad del contrato de OrionProtocol causa pérdidas de 2.9 millones de dólares
El 2 de febrero de 2023, los contratos de Orion Protocol en Ethereum y Binance Smart Chain sufrieron un ataque de reentrada, lo que resultó en pérdidas de aproximadamente 2.9 millones de dólares. Las pérdidas específicas incluyen 2,844,766 USDT en la cadena de Ethereum y 191,606 BUSD en la cadena inteligente de Binance.
Análisis del proceso de ataque
El atacante primero desplegó un contrato Token personalizado y realizó las operaciones de transferencia y autorización correspondientes. Luego, el atacante tomó prestados fondos a través del método swap de un DEX y llamó al método swapThroughOrionPool de OrionProtocol para intercambiar tokens. La ruta de intercambio incluía la dirección del contrato Token creado por el atacante.
Al ejecutar el método swapThroughOrionPool, debido a que el contrato del Token del atacante incluye una función de retorno de llamada, se puede llamar repetidamente al método depositAsset durante el proceso de transferencia. Esto provoca que el monto del depósito se calcule varias veces, y finalmente el atacante obtiene ganancias excesivas a través de la operación de retiro.
Flujo de capital
Los fondos iniciales del atacante provienen de la billetera caliente de una plataforma de intercambio. De los 1,651 ETH ganados por 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.
Núcleo de la vulnerabilidad
El problema radica en la función doSwapThroughOrionPool. Esta función realiza la operación de transferencia antes de actualizar la variable curBalance al ejecutar _doSwapTokens. Un atacante aprovecha el callback del método transfer del Token personalizado para llamar al método depositAsset, lo que lleva a una actualización incorrecta de curBalance. Esto permite al atacante retirar fondos excesivos a través de la función withdraw después de reembolsar el préstamo relámpago.
Sugerencias de seguridad
Para los contratos inteligentes con función de intercambio de tokens, los desarrolladores deben considerar los siguientes puntos:
Considerar las posibles situaciones inesperadas que pueden surgir debido a múltiples Tokens y rutas de intercambio.
Seguir el patrón de codificación "Checks-Effects-Interactions", es decir, primero realizar una verificación de estado, luego actualizar el estado del contrato y finalmente interactuar con contratos externos.
Actualizar las variables de estado clave antes de realizar llamadas externas.
Implementar mecanismos de seguridad como bloqueos de reentrada.
Realizar una auditoría de seguridad completa del contrato.
Al implementar estas medidas, se puede reducir significativamente el riesgo de ataques a los contratos inteligentes, mejorando así la seguridad y estabilidad 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.
OrionProtocol sufrió un ataque de reentrada, se robaron 2.9 millones de dólares.
La vulnerabilidad del contrato de OrionProtocol causa pérdidas de 2.9 millones de dólares
El 2 de febrero de 2023, los contratos de Orion Protocol en Ethereum y Binance Smart Chain sufrieron un ataque de reentrada, lo que resultó en pérdidas de aproximadamente 2.9 millones de dólares. Las pérdidas específicas incluyen 2,844,766 USDT en la cadena de Ethereum y 191,606 BUSD en la cadena inteligente de Binance.
Análisis del proceso de ataque
El atacante primero desplegó un contrato Token personalizado y realizó las operaciones de transferencia y autorización correspondientes. Luego, el atacante tomó prestados fondos a través del método swap de un DEX y llamó al método swapThroughOrionPool de OrionProtocol para intercambiar tokens. La ruta de intercambio incluía la dirección del contrato Token creado por el atacante.
Al ejecutar el método swapThroughOrionPool, debido a que el contrato del Token del atacante incluye una función de retorno de llamada, se puede llamar repetidamente al método depositAsset durante el proceso de transferencia. Esto provoca que el monto del depósito se calcule varias veces, y finalmente el atacante obtiene ganancias excesivas a través de la operación de retiro.
Flujo de capital
Los fondos iniciales del atacante provienen de la billetera caliente de una plataforma de intercambio. De los 1,651 ETH ganados por 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.
Núcleo de la vulnerabilidad
El problema radica en la función doSwapThroughOrionPool. Esta función realiza la operación de transferencia antes de actualizar la variable curBalance al ejecutar _doSwapTokens. Un atacante aprovecha el callback del método transfer del Token personalizado para llamar al método depositAsset, lo que lleva a una actualización incorrecta de curBalance. Esto permite al atacante retirar fondos excesivos a través de la función withdraw después de reembolsar el préstamo relámpago.
Sugerencias de seguridad
Para los contratos inteligentes con función de intercambio de tokens, los desarrolladores deben considerar los siguientes puntos:
Al implementar estas medidas, se puede reducir significativamente el riesgo de ataques a los contratos inteligentes, mejorando así la seguridad y estabilidad del proyecto.