Los ataques de reentrancia parecen complicados al principio. Déjame desglosarlos en términos simples y mostrarte algunas maneras de mantener seguros tus contratos inteligentes 🛡️
¿Qué es un ataque de reentrancia? 🧐
Es cuando ContractB llama de vuelta a ContractA mientras ContractA todavía está en ejecución. Cosas desagradables. A los atacantes les encanta esta vulnerabilidad para drenar fondos de los contratos 💸
Imagina esto:
ContractA tiene 10 ETH
ContractB puso 1 ETH
ContractB luego roba todo
El Mecanismo de Ataque 🕵️♂️
Necesitas dos cosas clave:
attack() función para comenzar todo
fallback() función para la parte astuta
El flujo va así:
ContractB inicia el ataque() que llama a withdraw() de ContractA
ContractA verifica el saldo de ContractB
ContractA envía ETH a ContractB
Esto activa la función de recuperación de ContractB()
El bucle continúa. Dinero perdido 🚨
Es algo sorprendente lo simple pero devastador que esto puede ser.
Ejemplo de Código Vulnerable 📝
Así es como se ve un contrato vulnerable:
solidity
function withdrawAll() public {
uint bal = balances[msg.sender];
require(bal > 0);
(bool enviado, ) = msg.sender.call{value: bal}("");
require(sent, "Error al enviar Ether");
balances[msg.sender] = 0; // ¿Actualizar DESPUÉS de enviar? ¡Gran error!
}
El contrato de ataque hace esto:
solidity
fallback() externo pagable {
if(etherStore.balance >= 1 ether)
etherStore.withdrawAll();
}
Haz que todos tus contratos hereden esto. Ecosistema más seguro.
Últimas tendencias 🔥
A partir de septiembre de 2025, estos ataques aún afectan a DeFi. No está del todo claro por qué los desarrolladores siguen cometiendo los mismos errores. Herramientas como Slither pueden detectar estos problemas. Echidna y Foundry ayudan a probarlos 🚀
La seguridad no se trata solo de agregar un modificador. Es una mentalidad.
Esta página puede contener contenido de terceros, que se proporciona únicamente con fines informativos (sin garantías ni declaraciones) y no debe considerarse como un respaldo por parte de Gate a las opiniones expresadas ni como asesoramiento financiero o profesional. Consulte el Descargo de responsabilidad para obtener más detalles.
Entendiendo los Ataques de Reentrada & Cómo Prevenirlos 🔐
Los ataques de reentrancia parecen complicados al principio. Déjame desglosarlos en términos simples y mostrarte algunas maneras de mantener seguros tus contratos inteligentes 🛡️
¿Qué es un ataque de reentrancia? 🧐
Es cuando ContractB llama de vuelta a ContractA mientras ContractA todavía está en ejecución. Cosas desagradables. A los atacantes les encanta esta vulnerabilidad para drenar fondos de los contratos 💸
Imagina esto:
El Mecanismo de Ataque 🕵️♂️
Necesitas dos cosas clave:
El flujo va así:
Es algo sorprendente lo simple pero devastador que esto puede ser.
Ejemplo de Código Vulnerable 📝
Así es como se ve un contrato vulnerable: solidity function withdrawAll() public { uint bal = balances[msg.sender]; require(bal > 0);
}
El contrato de ataque hace esto: solidity fallback() externo pagable { if(etherStore.balance >= 1 ether) etherStore.withdrawAll(); }
función attack() externo pagable { require(msg.value >= 1 ether); etherStore.deposit{value: 1 ether}(); etherStore.retirarTodo(); }
Tres maneras de detener estos ataques 🛡️
1. modificador nonReentrant 🔒
solidity bool privado bloqueado = false;
modificador nonReentrant() { require(!locked, "No reentrancy"); locked = true; _; locked = false; }
Agrégalo a funciones vulnerables. Simple pero efectivo.
2. Patrón de Comprobaciones-Efectos-Interacciones 📊
Esto es crucial:
solidity function withdrawAll() public { uint bal = balances[msg.sender]; require(bal > 0);
}
Actualiza tu estado primero. Interactúa después. Siempre.
3. Protección Global 🌐
Para proyectos más grandes:
solidity contrato GlobalReentrancyGuard { bool privado bloqueado = falso;
}
Haz que todos tus contratos hereden esto. Ecosistema más seguro.
Últimas tendencias 🔥
A partir de septiembre de 2025, estos ataques aún afectan a DeFi. No está del todo claro por qué los desarrolladores siguen cometiendo los mismos errores. Herramientas como Slither pueden detectar estos problemas. Echidna y Foundry ayudan a probarlos 🚀
La seguridad no se trata solo de agregar un modificador. Es una mentalidad.
¡Mantente alerta por ahí! 🛡️