OrionProtocol sufrió un ataque de reentrada con una pérdida de 2.9 millones de dólares. Análisis de vulnerabilidades de seguridad y recomendaciones de prevención.
Análisis del incidente de ataque de reentrada de OrionProtocol
El 2 de febrero de 2023 por la tarde, Orion Protocol en Ethereum y Binance Chain fue objeto de un ataque de reingreso debido a una vulnerabilidad en el contrato, con pérdidas de aproximadamente 2.9 millones de dólares, que incluyen 2,844,766 USDT en Ethereum y 191,606 BUSD en BSC.
Análisis del proceso de ataque
El atacante primero crea un contrato de Token y realiza operaciones de transferencia y autorización, preparándose para el ataque posterior. Luego, el atacante toma prestado a través del método swap de UNI-V2 y llama al método swapThroughOrionPool del contrato ExchangeWithAtomic para intercambiar tokens. La ruta de intercambio se establece en [USDC, Token creado por el atacante, USDT].
Durante el proceso de intercambio, debido a la funcionalidad de retroalimentación en el contrato de Token creado por el atacante, el atacante continuó llamando al método ExchangeWithAtomic.depositAsset a través de Token.Transfer, logrando así un ataque de reentrada. Esto llevó a que la cantidad depositada se acumulara continuamente, y finalmente el atacante completó su ganancia a través de una operación de retiro.
Flujo de fondos
Los fondos iniciales del atacante provienen de la cuenta de la billetera caliente de una plataforma de intercambio. De los 1651 ETH obtenidos, 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 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 ejecutar la transferencia de tokens, lo que crea una oportunidad para el atacante. El atacante añade una función de callback en la función transfer del token falso, que llama a la función depositAsset, lo que provoca una actualización incorrecta de curBalance. Finalmente, tras reembolsar el préstamo relámpago, el atacante retira fondos en exceso a través de la función withdraw.
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 los proyectos con funciones de intercambio de tokens, es necesario considerar los riesgos de seguridad que pueden surgir de múltiples tokens y rutas de intercambio. Se sugiere seguir la norma de codificación "primero verificar, luego escribir en variables, y después realizar llamadas externas" (modelo Checks-Effects-Interactions) para mejorar la seguridad y estabilidad del contrato. Además, los desarrolladores del proyecto deben eliminar los riesgos del contrato fuera de la cadena siempre que sea posible, para garantizar el funcionamiento seguro del 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.
21 me gusta
Recompensa
21
3
Compartir
Comentar
0/400
VirtualRichDream
· 07-15 08:57
¿Quién va a investigar si fue un traidor el que lo hizo?
Ver originalesResponder0
HallucinationGrower
· 07-12 12:30
¿Qué se ha hecho sin el trabajo de seguridad?
Ver originalesResponder0
degenonymous
· 07-12 12:23
Los contratos generalmente tienen muchas vulnerabilidades.
OrionProtocol sufrió un ataque de reentrada con una pérdida de 2.9 millones de dólares. Análisis de vulnerabilidades de seguridad y recomendaciones de prevención.
Análisis del incidente de ataque de reentrada de OrionProtocol
El 2 de febrero de 2023 por la tarde, Orion Protocol en Ethereum y Binance Chain fue objeto de un ataque de reingreso debido a una vulnerabilidad en el contrato, con pérdidas de aproximadamente 2.9 millones de dólares, que incluyen 2,844,766 USDT en Ethereum y 191,606 BUSD en BSC.
Análisis del proceso de ataque
El atacante primero crea un contrato de Token y realiza operaciones de transferencia y autorización, preparándose para el ataque posterior. Luego, el atacante toma prestado a través del método swap de UNI-V2 y llama al método swapThroughOrionPool del contrato ExchangeWithAtomic para intercambiar tokens. La ruta de intercambio se establece en [USDC, Token creado por el atacante, USDT].
Durante el proceso de intercambio, debido a la funcionalidad de retroalimentación en el contrato de Token creado por el atacante, el atacante continuó llamando al método ExchangeWithAtomic.depositAsset a través de Token.Transfer, logrando así un ataque de reentrada. Esto llevó a que la cantidad depositada se acumulara continuamente, y finalmente el atacante completó su ganancia a través de una operación de retiro.
Flujo de fondos
Los fondos iniciales del atacante provienen de la cuenta de la billetera caliente de una plataforma de intercambio. De los 1651 ETH obtenidos, 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 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 ejecutar la transferencia de tokens, lo que crea una oportunidad para el atacante. El atacante añade una función de callback en la función transfer del token falso, que llama a la función depositAsset, lo que provoca una actualización incorrecta de curBalance. Finalmente, tras reembolsar el préstamo relámpago, el atacante retira fondos en exceso a través de la función withdraw.
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 los proyectos con funciones de intercambio de tokens, es necesario considerar los riesgos de seguridad que pueden surgir de múltiples tokens y rutas de intercambio. Se sugiere seguir la norma de codificación "primero verificar, luego escribir en variables, y después realizar llamadas externas" (modelo Checks-Effects-Interactions) para mejorar la seguridad y estabilidad del contrato. Además, los desarrolladores del proyecto deben eliminar los riesgos del contrato fuera de la cadena siempre que sea posible, para garantizar el funcionamiento seguro del ecosistema Web3.