El proyecto Euler Finance sufrió un ataque de flash loan, con una pérdida cercana a 200 millones de dólares.
El 13 de marzo de 2023, el proyecto Euler Finance sufrió un ataque de flash loan debido a una vulnerabilidad en el contrato, con pérdidas de hasta 197 millones de dólares. El atacante aprovechó la falta de verificación de liquidez en la función donateToReserves del contrato del proyecto, obteniendo enormes beneficios a través de múltiples operaciones.
Análisis del proceso de ataque
El atacante primero toma prestados 30 millones de DAI de una plataforma de préstamos a través de un Flash Loans y despliega dos contratos: el contrato de préstamo y el contrato de liquidación.
El atacante depositó 20 millones de DAI prestados en el contrato del Protocolo Euler, obteniendo 195,000 eDAI.
Utilizando la función de apalancamiento de 10 veces del Protocolo Euler, el atacante tomó prestados 1,956,000 eDAI y 2,000,000 dDAI.
El atacante utiliza los 10 millones de DAI restantes para pagar parte de la deuda, destruye la cantidad correspondiente de dDAI, y luego vuelve a pedir prestada la misma cantidad de eDAI y dDAI.
Pasos clave: el atacante llama a la función donateToReserves, dona 1 millón de eDAI y luego liquida a través de la función liquidate, obteniendo 3.1 millones de dDAI y 2.5 millones de eDAI.
Finalmente, el atacante extrajo 389,000 DAI, devolvió 300,000 DAI en un Flash Loans, y obtuvo una ganancia de 88,700 DAI.
Causa de la vulnerabilidad
La vulnerabilidad central de este ataque radica en la falta de una verificación de liquidez necesaria en la función donateToReserves del contrato de Euler Finance. A diferencia de otras funciones clave como mint, la función donateToReserves no ejecuta la operación checkLiquidity. Esto permite que los atacantes eludan la verificación de liquidez normal, creando artificialmente un estado que puede ser liquidado y luego completando la liquidación para obtener ganancias.
En condiciones normales, la función checkLiquidity llamaría al módulo RiskManager para asegurarse de que la cantidad de Etoken del usuario sea mayor que la cantidad de Dtoken, a fin de mantener la seguridad del contrato. Sin embargo, debido a la falta de este paso crucial en la función donateToReserves, los atacantes pudieron aprovechar esta vulnerabilidad para llevar a cabo un ataque.
Consejos de seguridad
Para este tipo de ataques, recomendamos a los proyectos de blockchain:
Realizar una auditoría de seguridad completa antes de lanzar el contrato, para garantizar la seguridad del mismo.
Para los proyectos de préstamos, se debe prestar especial atención a los aspectos clave como el reembolso de fondos, la detección de liquidez y la liquidación de deudas.
Asegúrate de que todas las funciones que puedan afectar el estado de los activos del usuario incluyan las comprobaciones de seguridad necesarias, como la verificación de liquidez.
Realizar revisiones de código y actualizaciones periódicas, corrigiendo oportunamente las vulnerabilidades encontradas.
Establecer un mecanismo de respuesta de emergencia para poder reaccionar y manejar rápidamente en caso de que ocurra un incidente de seguridad.
Al adoptar estas medidas, los desarrolladores del proyecto pueden reducir significativamente el riesgo de sufrir ataques similares y mejorar la seguridad general del contrato.
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.
9 me gusta
Recompensa
9
5
Republicar
Compartir
Comentar
0/400
WhaleWatcher
· 08-11 16:40
Otra vez un tonto ha entrado.
Ver originalesResponder0
Lonely_Validator
· 08-10 08:22
¿La seguridad de la cadena de bloques es tan mala ahora? Sin palabras.
Euler Finance sufrió un ataque de flash loan con pérdidas cercanas a 200 millones de dólares.
El proyecto Euler Finance sufrió un ataque de flash loan, con una pérdida cercana a 200 millones de dólares.
El 13 de marzo de 2023, el proyecto Euler Finance sufrió un ataque de flash loan debido a una vulnerabilidad en el contrato, con pérdidas de hasta 197 millones de dólares. El atacante aprovechó la falta de verificación de liquidez en la función donateToReserves del contrato del proyecto, obteniendo enormes beneficios a través de múltiples operaciones.
Análisis del proceso de ataque
El atacante primero toma prestados 30 millones de DAI de una plataforma de préstamos a través de un Flash Loans y despliega dos contratos: el contrato de préstamo y el contrato de liquidación.
El atacante depositó 20 millones de DAI prestados en el contrato del Protocolo Euler, obteniendo 195,000 eDAI.
Utilizando la función de apalancamiento de 10 veces del Protocolo Euler, el atacante tomó prestados 1,956,000 eDAI y 2,000,000 dDAI.
El atacante utiliza los 10 millones de DAI restantes para pagar parte de la deuda, destruye la cantidad correspondiente de dDAI, y luego vuelve a pedir prestada la misma cantidad de eDAI y dDAI.
Pasos clave: el atacante llama a la función donateToReserves, dona 1 millón de eDAI y luego liquida a través de la función liquidate, obteniendo 3.1 millones de dDAI y 2.5 millones de eDAI.
Finalmente, el atacante extrajo 389,000 DAI, devolvió 300,000 DAI en un Flash Loans, y obtuvo una ganancia de 88,700 DAI.
Causa de la vulnerabilidad
La vulnerabilidad central de este ataque radica en la falta de una verificación de liquidez necesaria en la función donateToReserves del contrato de Euler Finance. A diferencia de otras funciones clave como mint, la función donateToReserves no ejecuta la operación checkLiquidity. Esto permite que los atacantes eludan la verificación de liquidez normal, creando artificialmente un estado que puede ser liquidado y luego completando la liquidación para obtener ganancias.
En condiciones normales, la función checkLiquidity llamaría al módulo RiskManager para asegurarse de que la cantidad de Etoken del usuario sea mayor que la cantidad de Dtoken, a fin de mantener la seguridad del contrato. Sin embargo, debido a la falta de este paso crucial en la función donateToReserves, los atacantes pudieron aprovechar esta vulnerabilidad para llevar a cabo un ataque.
Consejos de seguridad
Para este tipo de ataques, recomendamos a los proyectos de blockchain:
Realizar una auditoría de seguridad completa antes de lanzar el contrato, para garantizar la seguridad del mismo.
Para los proyectos de préstamos, se debe prestar especial atención a los aspectos clave como el reembolso de fondos, la detección de liquidez y la liquidación de deudas.
Asegúrate de que todas las funciones que puedan afectar el estado de los activos del usuario incluyan las comprobaciones de seguridad necesarias, como la verificación de liquidez.
Realizar revisiones de código y actualizaciones periódicas, corrigiendo oportunamente las vulnerabilidades encontradas.
Establecer un mecanismo de respuesta de emergencia para poder reaccionar y manejar rápidamente en caso de que ocurra un incidente de seguridad.
Al adoptar estas medidas, los desarrolladores del proyecto pueden reducir significativamente el riesgo de sufrir ataques similares y mejorar la seguridad general del contrato.