
Fuente: Sharkteam
El 30 de enero de 2024, Mim_Spell fue atacado por Lightning Loan.
Sharkteam realizó un análisis técnico del incidente lo antes posible y resumió los medios de precauciones de seguridad.
1. Análisis de transacciones de ataque
Dirección de ataque:
0x87f585809ce79ae39a5fa0c7c96d0d159eb678c9
Contrato de ataque:
0xe1091d17473b049cccd65c54f71677da85b77a45
0x13AF445F81B0DECA5DCB2BE6C691F545C95912
0xe59b54a9e37ab69f6e9312a9b3f7253ee184e5a
Ser atacado Contrato:
0x7259e152103756e1616a77ae982353c3751a6a90
Transacción de ataque:
0x26A83DB7E288838DD9FEE6FB7314AE58DCC6AEE9A20BF224C386FF5E80F7E4CF2
0xdb4616b89ad82062787a4e924d520639791302476484b9a6eca5126f79b6d87777
Proceso de ataque:
1. El atacante (0x87f58580) tomó prestados 300,000 tokens MIM a través del préstamo de rayos.
2. Luego envíe 2,40,000 tokens MIM al contrato atacado (0x7259e1520) para el siguiente paso para pagar el préstamo de los usuarios.
3. El atacante (0x87f58580) luego llamó a la función de reembolso para pagar el préstamo de otros usuarios, y luego se llamó la función de reembolso para pagar el préstamo de otros usuarios para reducir la variable elástica a 0.
4. Después de que las variables elásticas se reducen a 0, el atacante (0x87f58580) crea un nuevo contrato de ataque (0xe59b54a9) y continuamente llaman a las llamadas de préstamo y la función de reembolso hasta elastic = 0, base = 12008018381886666666521504972888 final.
5. Atacista posterior (0x87f58580) llama a la función de retiro de la función de préstamo y el contrato degenbox tomado prestados 5000047 MIM tokens.
6. El atacante (0x87f58580) devolvió la función de préstamo de rayos y convirtió 4400,000 tokens MIM a 1807 ETH, y esta transacción obtuvo una ganancia de aproximadamente 450W.
Segundo, análisis de vulnerabilidad
La esencia del ataque es que se calcula la precisión de la variable de préstamo, de modo que la proporción de valores de elásticos y base variables clave está desequilibrado, lo que resulta en problemas al calcular el número de hipotecas y préstamos, y eventualmente tomó prestado token MIM.
La función de préstamo y la función de reembolso en el contrato atacado (0x7259e1520) usan el método ascendente para calcular las dos variables de elástico y base.
El atacante (0x87f58580) primero estableció las variables elásticas y las variables base en 0 y 97 al pagar los préstamos de otros usuarios.
Posteriormente, la función de préstamo y la función de reembolso se llaman continuamente y el monto del parámetro es 1. Cuando la función de préstamo llama por primera vez a la función de préstamo, la lógica anterior se ejecutará y se devolverá a la función Agregar cuando elastic = 0.Esto causará elástico = 1, base = 98.
El atacante (0x87f58580) luego llama a la función de préstamo y pasó a 1. Debido a que elastic = 1 ejecutará más lógica, el valor de retorno calculado es 98. Al volver a la función Agregar, elastic = 2, la variable base es 196.
Pero en este momento el atacante (0x87f58580) llamó la función de reembolso y pasó a 1. Desde elastic = 2, la lógica de lo contrario se ejecutará. Cambio de variable hacia atrás 1, y la variable base es 195.
Se puede ver que después de experimentar el bucle de préstamo-repay, las variables elásticas permanecen sin cambios y la variable base casi se duplica. Finalmente, elastic = 0 base = 120080183810681886665215049728.
Cuando la proporción entre las variables elásticas y base es un desequilibrio seriamente, el atacante (0x87f58580) se puede agregar con un poco de hipoteca para pedir prestado una gran cantidad de tokens MIM a través de las restricciones en el modificador de solvente.
3. Sugerencia de seguridad
En respuesta a este ataque, debemos seguir las siguientes precauciones durante el proceso de desarrollo:
1. Al calcular la lógica relevante de la precisión del desarrollo, considere cuidadosamente la precisión y toda la situación.
2. Antes de que se lance el proyecto, un equipo profesional de auditoría de tercera parte necesita realizar auditorías de contratos inteligentes.