Reentrancy descifrada: el bug del contrato inteligente que sigue drenando millones en 2026, y el patrón Checks-Effects-Interactions que lo detiene en el código
La reentrancia no es magia. Es un error de orden: tu contrato actualiza su propio estado DESPUÉS de realizar una llamada externa en lugar de antes, y un atacante llama de nuevo durante ese intervalo. Corrige el orden y el bug desaparece.
El DAO perdió aproximadamente 3,6 millones de ETH (unos 60 millones de dólares, alrededor del 5% de todo el ETH existente en ese momento) por este error exacto el 17 de junio de 2016. Las consecuencias dividieron a Ethereum en ETH y ETC.
Diez años después, sigue drenando fondos. Solv Protocol perdió $2,73 millones por una reentrancia el 5 de marzo de 2026, y aproximadamente $52 millones fueron robados en diversos protocolos onchain en mayo de 2026 (DeFiLlama vía CryptoTimes, 31 de mayo de 2026).
El patrón vulnerable: leer el saldo, enviar los ETH con una llamada de bajo nivel, LUEGO establecer el saldo en cero. La función receive() del atacante vuelve a entrar en withdraw() antes de que ese cero se registre, y se repite hasta que el contrato queda vacío.
Dos soluciones, usadas juntas:
Checks-Effects-Interactions. Valida, actualiza TODO el estado y luego realiza la llamada externa por último. Mueve balances[msg.sender] = 0 por encima de la llamada y la llamada reentrante leerá cero y revertirá.
La protección nonReentrant de OpenZeppelin. Un mutex de almacenamiento (NOT_ENTERED a ENTERED) que revierte ante la reentrada. Úsalo junto con CEI, no solo uno u otro.
Dos cosas que la mayoría de los desarrolladores aún hacen mal.
1. .transfer() ya no es un escudo: el límite de 2300 gas dejó de ser un supuesto seguro cuando EIP-1884 aumentó el gas de SLOAD en 2019. Usa .call{value:}("") con CEI.
2. La reentrancia de solo lectura evade una protección estándar, porque una función view que lee durante una actualización devuelve un estado corrupto y puede envenenar un oracle de precios (dForce, $3,64 millones).
Solo con fines educativos. No es asesoramiento financiero.
Síguenos para obtener ideas diarias: donde la cadena de bloques se encuentra con la IA, un deslizamiento satisfactorio a la vez.
#Solidity #SmartContractSecurity #Web3Security #Ethereum #DeFi #SmartContracts #BlockchainDeveloper #SolidityDev #EVM #OpenZeppelin #Reentrancy #Web3Dev #BlockchainSecurity #DeFiSecurity #SmartContractAudit #CodeSecurity #OnChain #BlockchainEducation