Módulo SSO 2 - Vulnerabilidades de contratos inteligentes: análisis profundo de ataques de reentrada
Los contratos inteligentes ofrecen transparencia pero conllevan riesgos. Este artículo descubre vulnerabilidades como la reentrada, con la pérdida de $150M de DAO como caso. El desbordamiento de enteros provocó el revés de $900M de BeautyChain. DAOMaker perdió $4M debido a fallos de control de acceso. Los ataques de préstamo flash hicieron que Harves Finance perdiera $38M.
Por Markos Mebellis

En esta página
Los contratos inteligentes están revolucionando las industrias globales con su eficiencia, transparencia y características inmutables. Sin embargo, su diseño abierto y automatizado también los expone a riesgos. Para maximizar su potencial y minimizar las amenazas, es vital comprender sus vulnerabilidades y las posibles vías de ataque. Crear y mantener estos contratos exige una atención cuidadosa y el cumplimiento de las mejores prácticas. Este artículo profundiza en las vulnerabilidades comunes, ilustrándolas con casos del mundo real para mejorar la comprensión. Veamos el siguiente artículo, cortesía de Salus Security.
Vulnerabilidades clave:
**Reentrada:** Aquí, los atacantes explotan una brecha, reingresando a funciones antes de que se completen operaciones clave o se actualicen valores.
Reentrada de función única: Esto ocurre cuando un contrato interactúa con un contrato malicioso, permitiendo que este último reingrese a una función. Por ejemplo, los contratos maliciosos pueden reingresar continuamente a la función 'withdrawBalance', extrayendo más ether antes de que se actualicen los saldos.
Ataques notables:
- The DAO (2016): Después de recaudar $150 millones, fue hackeado debido a vulnerabilidades de codificación. Esto provocó una división en la red Ethereum.
- PolyDex (2021): Perdió $500k debido a un ataque de reentrada en el contrato inteligente PLX Locker.
- Bacon Protocol (2022): Sufrió una pérdida de $1M por un error de reentrada en la función lend().
- Lendf.Me (2020): Perdió aproximadamente $24.7 millones en múltiples criptomonedas.
**Reentrada entre funciones:** Surge de estados compartidos entre diferentes funciones y una protección deficiente contra reentrada. El ejemplo de 'balances' anterior indica que, aunque 'withdrawAll' tenga protección, los atacantes aún pueden explotar la función 'transfer'.
Incidentes infames:
- DFX Finance (2022): Perdió más de $7 millones debido a un ataque que explotó una función sin protección contra reentrada.
- Hundred Finance (2022): Perdió alrededor de $6.5 millones después de que un ataque de reentrada explotara la función borrowFresh.
- Fei Protocol (2022): Perdió aproximadamente $80 millones por un ataque que aprovechó una vulnerabilidad de reentrada.
**Reentrada entre contratos:** Resulta de estados compartidos entre diferentes contratos y secuencias incorrectas de modificación de variables. Incluso si las funciones tienen protección, otras funciones, como 'burnAccount', aún pueden ser explotadas.
Ataques destacados:
- Rari Capital (2021): Perdió aproximadamente $10 millones (~2600 ETH) en menos de una hora.
- ValueDefi (2021): Perdió 5345.314 WBNB debido a cálculos de participaciones inválidos, que dependían de datos externos.
Reentrada de solo lectura:
La reentrada de solo lectura explota una función que, aunque no altera el estado del contrato, aún puede producir resultados erróneos cuando el estado no es consistente.
Ataques destacados:
- QuickSwap (2022): Los explotadores usaron indebidamente un préstamo flash para alterar el precio spot del activo, estafando 138 ETH y 700 tokens MATIC. Esto fue posible debido a un fallo en el oráculo de Curve LP.
- dForce (2023): Un error de reentrada de solo lectura estaba en el código que accedía a los oráculos de precios en las cadenas Arbitrum y Optimism con Curve Finance.
- Sentimente (2023): Un ataque, que explotó un fallo de reentrada de solo lectura, provocó un robo de $1 millón. Afortunadamente, el 90% fue devuelto por el perpetrador.
- Sturdy (2023): Perdió aproximadamente 442 ETH debido a un problema de reentrada de solo lectura de Balancer en el que se manipuló el precio de B-stETH-STABLE.
Prevención de vulnerabilidades de reentrada:
- Cumple siempre el patrón check-effect-interaction.
- Emplea protección contra reentrada para todas las operaciones sensibles.
- Gestiona cada llamada externa meticulosamente.
Desbordamiento de enteros:
Cuando los cálculos superan los límites, se desbordan, lo que a menudo produce valores minúsculos o enormes.
Ataques ilustrativos:
- BeautyChain (2018): Los atacantes obtuvieron 10^58 BEC mediante un desbordamiento de enteros, deshaciéndose de la asombrosa cifra de $900 millones.
- Poolz (2023): Resultó en una pérdida de aproximadamente $665,000 en las cadenas de Ethereum, Binance y Polygon.
Contramedidas contra el desbordamiento de enteros:
- Utiliza métodos de cálculo seguros como la biblioteca safeMath.
- Prioriza la verificación de límites para asegurar que los resultados permanezcan dentro del rango.
- Adopta la versión 0.8.0 o posterior del compilador de Solidity para la detección integrada de desbordamientos.
Control de acceso:
Las vulnerabilidades de control de acceso surgen de la ausencia de restricciones de acceso estrictas en funciones que manejan operaciones cruciales.
- Ataques destacados:
- DAOMaker (2021): Se sustrajeron nada menos que ~$4M después de que la función
initquedara vulnerable. - GymNetwork (2022): Los explotadores aprovecharon un descuido de autenticación en depositFromOtherContract(), facilitando un aumento ilícito de saldo sin ningún pago real. ¿La pérdida? Alrededor de 2,475.91 WBNB.
- Tempdao (2023): Un enfoque laxo del control de acceso para la función migrateStake provocó una pérdida superior a $2.34 millones.
Vulnerabilidad de control de acceso
- Descripción: Vulnerabilidades que surgen debido a mecanismos de restricción inadecuados que gobiernan el acceso y los privilegios a operaciones específicas dentro de un sistema.
Medidas de prevención:
- Verificación estricta de permisos: Aplica siempre protocolos de permisos estrictos para las funciones, especialmente aquellas que manejan operaciones sensibles.
- Mecanismo de multifirma: Para tareas que requieren toma de decisiones conjunta, utiliza protocolos de multifirma que requieran múltiples aprobaciones antes de ejecutar operaciones sensibles.
Vectores de ataque comunes
- Descripción: Diversos métodos o canales mediante los cuales los atacantes explotan vulnerabilidades en un sistema, principalmente en contratos inteligentes.
Ejemplos notables:
- Ataques de préstamo flash: Explota la función de préstamo instantáneo de los sistemas de finanzas descentralizadas para ejecutar actividades maliciosas.
- Front-Running: Los atacantes se enteran de una transacción pendiente de otro usuario y actúan en consecuencia ofreciendo una tarifa de gas más alta.
Ataque de préstamo flash
- Descripción: Aunque en sí mismo no es un ataque, FlashLoan es una función de DeFi que permite a los usuarios pedir prestadas sumas considerables al instante sin colateral. Se ha explotado debido a fallos lógicos en las interacciones y relaciones de los contratos.
Ataques notables:
- Harves Finance (2020.10.26): Provocó una pérdida de 38 millones de dólares.
- InverseFinance (2022.6.16): Supuso una pérdida de 53.2445 WBTC y 99,976.29 USDT.
- NewFreeDAO (2022.9.8): Drenó 4,481 WBNB, equivalente a aproximadamente $1.25 millones.
- Lodestar (2022.12.11): Explotado mediante manipulación del precio del oráculo.
- **0vix (2023.4.28)**Provocó una pérdida de $2 millones en la cadena Polygon.
Recomendaciones de prevención:
- Reconoce las características de Flashloan durante el desarrollo del proyecto.
- Para una determinación precisa del precio, utiliza promedios ponderados por tiempo o múltiples oráculos.
Front-running
- Descripción: Un atacante obtiene conocimiento de la transacción de otro usuario desde el memPool y se aprovecha de ello ofreciendo una comisión de gas más alta.
Ataques notables:
- Sushi Badger Digg (2021.1.25): Resultó en una pérdida de 81.68 ETH.
- Pool Ape-ETH de Sushiswap (2022.5.17): El atacante obtuvo una ganancia de aproximadamente 0.3 ETH.
- Uniswap (2023.4.2): Causó una pérdida de alrededor de $25 millones mediante un ataque sándwich.
Recomendaciones de prevención:
- Usa protección contra slippage al operar.
- Ejecuta operaciones fuera de las horas pico, especialmente en mercados volátiles.
- Emplea el rpc FlashBot de 1inch para enviar operaciones directamente a los mineros, evitando así el memPool.
Resumen
¡Felicidades! Completaste el Módulo 2 - Vulnerabilidades de contratos inteligentes: una inmersión profunda en ataques de reentrada y exploits comunes
Repasemos lo que has aprendido:
Vulnerabilidades de reentrada - Los atacantes explotan fallos y vuelven a entrar en funciones antes de que se completen por completo.
- Reentrada en una sola función: Un contrato malicioso vuelve a entrar en una función de otro contrato.
- Reentrada entre funciones: Se explotan estados compartidos entre distintas funciones debido a una protección de reentrada deficiente.
- Reentrada entre contratos: Explota estados compartidos entre distintos contratos.
- Reentrada de solo lectura: Explota una función que produce resultados erróneos cuando el estado no es consistente.
Desbordamiento de enteros - Cálculos que superan los límites establecidos, generando valores extremos.
Vulnerabilidades de control de acceso - Surgen de la ausencia de restricciones de acceso estrictas en funciones esenciales.
Vectores de ataque comunes - Métodos mediante los cuales los atacantes explotan vulnerabilidades del sistema.
**Ataque de préstamo flash (FlashLoan)** - Una función de DeFi que permite pedir prestado grandes cantidades al instante sin garantía, pero que se explota debido a fallos lógicos.
Ataque de front-running- Los atacantes conocen las transacciones pendientes y se aprovechan ofreciendo comisiones de gas más altas.
Este artículo te lo trajo:
