Análisis del incidente de ataque por reentrada de OrionProtocol
El 2 de febrero de 2023 por la tarde, el contrato de OrionProtocol en Ethereum y Binance sufrió un ataque de reentrada debido a una vulnerabilidad. El atacante logró robar aproximadamente 2.9 millones de dólares, que incluían 2,844,766 USDT en Ethereum y 191,606 BUSD en BSC.
Análisis del proceso de ataque
El atacante primero creó un contrato de Token especial, y realizó operaciones de transferencia y autorización, preparándose para el ataque posterior. Luego, el atacante tomó un préstamo a través del método swap de UNI-V2 y llamó al método swapThroughOrionPool del contrato ExchangeWithAtomic para realizar el intercambio de tokens.
La ruta de intercambio se establece como [USDC, Token creado por el atacante, USDT]. Durante el proceso de intercambio, debido a que el contrato del Token creado por el atacante incluye una función de callback, se desencadenó un ataque de reentrada al ejecutar el método ExchangeWithAtomic.swapThroughOrionPool. El atacante continuó llamando al método ExchangeWithAtomic.depositAsset a través de Token.Transfer, lo que llevó a una acumulación continua del monto depositado, y finalmente completó la obtención de ganancias a través de una operación de retiro.
Flujo de fondos
Los fondos iniciales del atacante provienen de la cuenta del monedero caliente de una plataforma de intercambio. De las 1,651 ETH obtenidas en el ataque, 657.5 todavía permanecen en la dirección del monedero del atacante, mientras que el resto ha sido transferido a través de un servicio de mezcla.
Análisis de vulnerabilidades
El problema central de la vulnerabilidad se encuentra en la función doSwapThroughOrionPool. Esta función actualiza la variable curBalance después de realizar la transferencia de tokens, lo que crea una oportunidad para que el atacante. El atacante añade una funcionalidad de callback en la función transfer del contrato Token que él creó, la cual llama nuevamente a la función depositAsset. Esto provoca que la variable curBalance se actualice incorrectamente, permitiendo al atacante retirar fondos adicionales a través de la función withdraw después de reembolsar el préstamo flash.
Reproducción de ataques
Los investigadores proporcionaron parte del código POC, simulando el proceso de ataque. Los resultados de las pruebas mostraron que el atacante logró aprovechar la vulnerabilidad del contrato para obtener USDT adicional.
Sugerencias de seguridad
Para este tipo de ataques, se recomienda que los desarrolladores del proyecto consideren los siguientes puntos al diseñar el contrato:
Evaluar exhaustivamente los posibles riesgos de seguridad que pueden surgir de múltiples Tokens y rutas de intercambio.
Seguir la norma de codificación "primero juzgar, luego escribir en variables, y después realizar llamadas externas" (modelo Checks-Effects-Interactions).
Al implementar la función de intercambio de tokens, preste especial atención a prevenir ataques de reentrada.
Realizar auditorías de código de forma regular para detectar y corregir posibles vulnerabilidades a tiempo.
Considerar la implementación de límites en el monto de las transacciones u otras medidas de control de riesgos.
Este evento subraya nuevamente la importancia de la seguridad en los contratos inteligentes. Los desarrolladores del proyecto deben prestar atención continua a la seguridad de los contratos y tomar medidas activas para proteger los activos de los usuarios, con el fin de mantener el desarrollo saludable de todo el ecosistema Web3.
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.
16 me gusta
Recompensa
16
6
Compartir
Comentar
0/400
SybilSlayer
· 07-28 15:34
Otra vez reentrada, qué aburrido.
Ver originalesResponder0
CantAffordPancake
· 07-28 11:05
Otra vulnerabilidad en el contrato, estoy impresionado.
Ver originalesResponder0
GateUser-26d7f434
· 07-25 18:03
Rug Pull~
Ver originalesResponder0
OvertimeSquid
· 07-25 17:55
Otra vez los contratos están siendo Cupones de clip, estoy aturdido.
Ver originalesResponder0
BrokenYield
· 07-25 17:55
otro día, otro hackeo de defi... las vulnerabilidades del protocolo nunca duermen
OrionProtocol sufrió un ataque de reentrada, se robaron cerca de 3 millones de dólares en fondos.
Análisis del incidente de ataque por reentrada de OrionProtocol
El 2 de febrero de 2023 por la tarde, el contrato de OrionProtocol en Ethereum y Binance sufrió un ataque de reentrada debido a una vulnerabilidad. El atacante logró robar aproximadamente 2.9 millones de dólares, que incluían 2,844,766 USDT en Ethereum y 191,606 BUSD en BSC.
Análisis del proceso de ataque
El atacante primero creó un contrato de Token especial, y realizó operaciones de transferencia y autorización, preparándose para el ataque posterior. Luego, el atacante tomó un préstamo a través del método swap de UNI-V2 y llamó al método swapThroughOrionPool del contrato ExchangeWithAtomic para realizar el intercambio de tokens.
La ruta de intercambio se establece como [USDC, Token creado por el atacante, USDT]. Durante el proceso de intercambio, debido a que el contrato del Token creado por el atacante incluye una función de callback, se desencadenó un ataque de reentrada al ejecutar el método ExchangeWithAtomic.swapThroughOrionPool. El atacante continuó llamando al método ExchangeWithAtomic.depositAsset a través de Token.Transfer, lo que llevó a una acumulación continua del monto depositado, y finalmente completó la obtención de ganancias a través de una operación de retiro.
Flujo de fondos
Los fondos iniciales del atacante provienen de la cuenta del monedero caliente de una plataforma de intercambio. De las 1,651 ETH obtenidas en el ataque, 657.5 todavía permanecen en la dirección del monedero del atacante, mientras que el resto ha sido transferido a través de un servicio de mezcla.
Análisis de vulnerabilidades
El problema central de la vulnerabilidad se encuentra en la función doSwapThroughOrionPool. Esta función actualiza la variable curBalance después de realizar la transferencia de tokens, lo que crea una oportunidad para que el atacante. El atacante añade una funcionalidad de callback en la función transfer del contrato Token que él creó, la cual llama nuevamente a la función depositAsset. Esto provoca que la variable curBalance se actualice incorrectamente, permitiendo al atacante retirar fondos adicionales a través de la función withdraw después de reembolsar el préstamo flash.
Reproducción de ataques
Los investigadores proporcionaron parte del código POC, simulando el proceso de ataque. Los resultados de las pruebas mostraron que el atacante logró aprovechar la vulnerabilidad del contrato para obtener USDT adicional.
Sugerencias de seguridad
Para este tipo de ataques, se recomienda que los desarrolladores del proyecto consideren los siguientes puntos al diseñar el contrato:
Este evento subraya nuevamente la importancia de la seguridad en los contratos inteligentes. Los desarrolladores del proyecto deben prestar atención continua a la seguridad de los contratos y tomar medidas activas para proteger los activos de los usuarios, con el fin de mantener el desarrollo saludable de todo el ecosistema Web3.