Descripción: La reentrada es una vulnerabilidad crítica en los contratos inteligentes que permite a un atacante ejecutar repetidamente una función antes de que la ejecución anterior haya finalizado. Este tipo de ataque se basa en la capacidad de un contrato inteligente para llamar a otros contratos, lo que puede ser explotado para manipular el estado del contrato original. En esencia, un atacante puede aprovechar esta característica para realizar múltiples transacciones en un corto período, lo que puede resultar en la pérdida de fondos o la alteración de datos. La reentrada se convierte en un problema especialmente grave en entornos donde las transacciones son rápidas y los contratos interactúan entre sí, lo que aumenta la posibilidad de que un atacante pueda ejecutar su código malicioso antes de que el contrato original complete su ejecución. Esta vulnerabilidad ha llevado a la necesidad de implementar medidas de seguridad más robustas en el desarrollo de contratos inteligentes, como el uso de patrones de diseño que prevengan la reentrada, asegurando que las funciones críticas no puedan ser llamadas de nuevo hasta que se complete la ejecución anterior. La reentrada es un recordatorio de la importancia de la seguridad en el desarrollo de aplicaciones descentralizadas y la necesidad de auditorías rigurosas para identificar y mitigar riesgos potenciales.
Historia: La vulnerabilidad de reentrada se hizo famosa tras el ataque al DAO (Decentralized Autonomous Organization) en 2016, donde un atacante explotó esta debilidad para drenar aproximadamente 3.6 millones de Ether. Este evento llevó a una crisis en la comunidad de Ethereum y resultó en un hard fork que creó Ethereum Classic. Desde entonces, la reentrada ha sido objeto de estudio y discusión en la comunidad de desarrolladores de contratos inteligentes, lo que ha llevado a la implementación de mejores prácticas y patrones de diseño para mitigar este tipo de vulnerabilidades.
Usos: La reentrada se utiliza principalmente como un concepto de seguridad en el desarrollo de contratos inteligentes. Los desarrolladores deben ser conscientes de esta vulnerabilidad al diseñar sus contratos, implementando patrones de diseño como ‘checks-effects-interactions’ para prevenir ataques de reentrada. Además, se han desarrollado herramientas y bibliotecas que ayudan a auditar y verificar la seguridad de los contratos inteligentes contra esta y otras vulnerabilidades.
Ejemplos: Un ejemplo notable de un ataque de reentrada es el caso del DAO en 2016, donde el atacante utilizó esta vulnerabilidad para retirar fondos de manera repetida antes de que el contrato pudiera actualizar su saldo. Otro ejemplo es el ataque a la plataforma de préstamos bZx en 2020, donde se explotó una vulnerabilidad de reentrada para drenar fondos de la plataforma.