El ataque de reentrada es uno de los ataques más destructivos en el contrato inteligente Solidity. Un ataque de reentrada se produce cuando una función realiza una llamada externa a otro contrato que no es de confianza. El contrato no fiable realiza una llamada recursiva a la función original en un intento de drenar fondos.
Cuando el contrato no actualiza su estado antes de enviar los fondos, el atacante puede llamar continuamente a la función de retirada para drenar los fondos del contrato. Un ataque de reentrada famoso en el mundo real es el ataque DAO, que causó una pérdida de 60 millones de dólares estadounidenses.
Otro ejemplo de este común error le sucedio al protocolo Lendf.me el cual, en abril de 2020, sufrió un ataque que produjo una pérdida de 25 millones de dólares. Lendf.me era un protocolo de prestamos descentralizados en la red de Ethereum.
Los desarrolladores del protocolo pasaron por alto el hecho de que los tokens ERC-777 contienen una función de devolución de llamada que notifica a los usuarios cuando se ha enviado o recibido dinero. Los piratas informáticos aprovecharon la vulnerabilidad instituyendo un contrato inteligente malicioso como destinatario y vaciando el protocolo Lendf.me del 99,5% de sus fondos.
Pese a que el primer ataque de reentrada se produjo en 2016, vemos que sigue siendo una preocupación común entre desarrolladores y tenemos que tener cuidado ya que existen distintos tipos dentro de este mismo ataque: de reentrada única, de funciones cruzadas y de contrato cruzado.
En próximos posts nos adentraremos en elgino de estos tipos y más historias relacionadas, hasta entonces, tegan cuidado con los contratos que dejan permanentes en la blockchain.