
Un replay attack es un ataque en el que una transacción o autorización válida previamente se vuelve a enviar al sistema, provocando su ejecución de nuevo. Es como copiar un documento firmado y presentarlo en distintos mostradores para obtener varios sellos.
En blockchain, las firmas se generan con claves privadas, que funcionan como sellos digitales para confirmar: “Apruebo esta acción”. Si una transacción firmada puede reconocerse en otros contextos, queda vulnerable a la repetición.
Para evitar duplicidades, las blockchains recurren a un identificador único llamado nonce. El nonce es como un número de serie único para cada operación, que nunca se repite. El sistema solo acepta nonces no utilizados.
En entornos cross-chain o bifurcados, también se necesita un chainId. El chainId es un identificador de red que vincula la transacción a una cadena concreta y evita que se repita en otra diferente.
Los replay attacks suelen ocurrir cuando el sistema no define con claridad el “contexto” de una acción. El contexto abarca a qué blockchain pertenece la acción, si tiene un identificador único, si cuenta con fecha de expiración o si está ligada a un dominio o smart contract concreto.
Si una firma solo acredita el consentimiento para una acción, sin indicar la cadena, la aplicación o el periodo de validez, cualquiera con acceso a la firma podría reutilizarla en otro entorno.
Si una aplicación solo rastrea el estado “usado o no usado” de forma local o en caché, en vez de hacerlo en la cadena, los replay attacks son más fáciles de ejecutar. De forma similar, tras un fork, si ambas cadenas comparten formatos de transacción y nonces, es posible la repetición entre cadenas.
En repeticiones dentro de la misma cadena, los atacantes interceptan un mensaje de autorización o una transacción especial y lo reenvían en la misma blockchain. Esto ocurre a menudo cuando las “autorizaciones con firma offline” no incluyen nonces únicos ni marcas de expiración.
En repeticiones entre cadenas, las transacciones o mensajes carecen de vinculación con el chainId, o tras un fork, ambas cadenas aceptan el mismo formato de firma. Un atacante puede ejecutar una transacción válida de la cadena A nuevamente en la cadena B.
A nivel de smart contract, si los contratos no registran los IDs de mensajes procesados o no son idempotentes (de modo que las llamadas repetidas generan efectos acumulativos), los atacantes pueden invocar operaciones varias veces cuando solo se pretendía una ejecución.
En 2016, Ethereum sufrió una bifurcación que dio lugar a ETH y ETC. Como las primeras transacciones no distinguían entre cadenas, aparecieron riesgos de repetición entre cadenas. EIP-155 se introdujo en 2016 para añadir chainId a las transacciones y reducir drásticamente estos ataques (referencia: historial de Ethereum Improvement Proposal).
En escenarios de autorización, si las aprobaciones basadas en firma para transferencias o límites de gasto no incluyen expiración ni nonces únicos, las firmas pueden reenviarse. EIP-2612 se presentó en 2020 para estandarizar la autorización por firma en tokens ERC-20, exigiendo nonce y expiración (referencia: Ethereum Improvement Proposal).
Si los puentes cross-chain y los protocolos de mensajería no asignan identificadores únicos ni rastrean mensajes consumidos, los replay attacks pueden provocar acuñaciones o liberaciones de activos repetidas. El sector mitiga estos riesgos usando IDs de mensaje y seguimiento de estado en la cadena.
Primero, revisa el contenido de cualquier solicitud de firma. Si tu wallet te solicita una “firma ciega” (sin detalles claros de la transacción, dominio o cadena), el riesgo de repetición es mayor.
Luego, verifica si la autorización incluye fecha de expiración y nonce único. Si falta alguno, aumenta la exposición.
Comprueba que exista contexto explícito de cadena. La ausencia de chainId o separación de dominio (como en los dominios EIP-712) incrementa el riesgo de repetición entre diferentes entornos.
Por último, presta atención a signos de ejecuciones repetidas inusuales, como la misma autorización usada varias veces, activos transferidos repetidamente en poco tiempo o mensajes idénticos con efectos en varias cadenas.
Paso 1: Vincula las transacciones a su contexto de cadena. Usa el chainId de EIP-155 para restringir cada transacción a su cadena destino y evitar repeticiones cross-chain.
Paso 2: Asigna a cada autorización un nonce único y una fecha de expiración. Estándares como EIP-2612 y Permit2 exigen que cada firma incluya nonce y deadline; las autorizaciones caducadas no son válidas.
Paso 3: Registra los mensajes o nonces “usados” en smart contracts. Cada mensaje debe tener un ID no reutilizable y su estado de consumo almacenado en la cadena para un procesamiento idempotente.
Paso 4: Utiliza firmas estructuradas según EIP-712. Las firmas deben incluir nombre de dominio (verifyingContract, name, version), chainId y contenido legible para minimizar el mal uso y los vectores de repetición.
Paso 5: Implementa validación bidireccional en puentes cross-chain y canales de mensajería. Verifica no solo las cadenas origen y destino, sino también la unicidad del mensaje, números de lote y estado de procesamiento para evitar ejecuciones repetidas por rutas diferentes.
Paso 1: Firma solo en interfaces que muestren detalles claros en texto. Rechaza firmas ciegas; asegúrate de que el aviso incluya dominio, información de cadena y descripción de propósito.
Paso 2: Establece límites para las autorizaciones. Prefiere aprobaciones con tiempo limitado y tope; revoca regularmente permisos no usados mediante exploradores de blockchain o herramientas de gestión. Al retirar fondos de exchanges como Gate, verifica siempre que has seleccionado la red y dirección correctas para evitar errores entre entornos.
Paso 3: Separa fondos de wallets operativos. Guarda los activos principales en hardware wallets o wallets de solo lectura; interactúa con DApps usando wallets calientes con fondos menores para minimizar pérdidas por autorizaciones repetidas.
Paso 4: Usa libretas de direcciones y listas blancas. Guarda direcciones de destinatarios frecuentes con notas en la libreta de Gate y activa listas blancas de retiro para reducir riesgos de errores o firmas de phishing que generen envíos repetidos.
Paso 5: Supervisa la actividad anómala. Si detectas transacciones duplicadas o autorizaciones disparadas repetidamente en poco tiempo, pausa inmediatamente las operaciones, revoca autorizaciones y comprueba la seguridad de dispositivos y extensiones.
Un replay attack consiste en reenviar la misma transacción o autorización válida; el problema principal es la ejecución repetida. El double-spend busca gastar el mismo activo dos veces, normalmente implicando mecanismos de consenso y reorganización de bloques, lo que es diferente a nivel de protocolo.
Un ataque Sybil utiliza múltiples identidades para suplantar a muchos usuarios y manipular votaciones o distribuciones; no está relacionado con la repetición de transacciones, sino con el engaño en la capa de identidad. Los replay attacks ocurren en la capa de transacción o mensaje.
Además, los ataques man-in-the-middle suelen modificar datos o rutas; los replay attacks no alteran el contenido, sino que simplemente reenvían datos idénticos.
Desde que EIP-155 introdujo el chainId en 2016, los ataques de repetición entre cadenas han disminuido notablemente; EIP-2612 (2020) y Permit2 estandarizaron los mecanismos de nonce y expiración para aprobaciones por firma. En 2025, con la proliferación de redes multichain y Layer 2, los canales de mensajes, los IDs anti-repetición y el diseño idempotente serán infraestructura básica.
La abstracción de cuentas (por ejemplo, ERC-4337) fomenta la gestión de nonces por dominio y estrategias que usan nonces diferentes para cada operación, lo que reduce el riesgo de repetición dentro de un mismo dominio. Los puentes cross-chain ahora priorizan la verificación de origen y el seguimiento de mensajes únicos para limitar oportunidades de ejecución repetida.
La esencia de un replay attack es “contenido válido ejecutado en el contexto incorrecto”. La solución pasa por clarificar el contexto: identificadores de cadena, nonces únicos, fechas de expiración, vinculación de dominio y registrar siempre los estados consumidos en la cadena. Para desarrolladores: adopta los estándares EIP-155, EIP-712, EIP-2612/Permit2 junto con diseño idempotente. Para usuarios: evita firmas ciegas, usa autorizaciones con tiempo limitado, separa wallets por función y activa listas blancas en exchanges para mitigar riesgos. Si observas repeticiones anómalas con fondos, detén las operaciones y revoca autorizaciones de inmediato.
Los replay attacks no roban directamente tus activos, pero pueden provocar transacciones maliciosas repetidas. Por ejemplo, si transfieres 100 tokens en la cadena A y un atacante repite esa transacción en la cadena B, podrías perder fondos en ambas cadenas. La defensa clave es usar wallets que verifiquen el chainId y extremar la precaución en operaciones cross-chain.
Los exchanges centralizados como Gate cuentan con varias capas internas de seguridad, por lo que los usuarios habituales corren un riesgo mínimo de replay attack al operar dentro de la plataforma. El principal riesgo aparece en transferencias cross-chain usando wallets de autocustodia. Para trading spot o de derivados en Gate, los controles de riesgo del propio exchange protegen tu cuenta.
Los grandes cambios en el ecosistema (como fusiones de cadenas o forks) sí aumentan el riesgo de replay attack. Sin embargo, los proyectos suelen implementar medidas de protección, como actualizar el chainId antes del evento. Como usuario, espera siempre los anuncios oficiales antes de realizar operaciones cross-chain durante periodos de transición para evitar ser objetivo de ataques.
La filtración de la clave privada ya es un incidente grave de seguridad. Los replay attacks lo agravan permitiendo a los atacantes no solo mover activos en una cadena, sino también repetir transacciones en varias cadenas, pudiendo vaciar todos los activos similares en cualquier red. Transfiere tus fondos a un wallet nuevo de inmediato; es la única solución.
EIP-155 introdujo el mecanismo chainId, de modo que cada transacción lleva un identificador de red único y evita su ejecución en otras cadenas. Las redes modernas de Ethereum y cadenas compatibles han adoptado este estándar, haciendo inviables la mayoría de replay attacks. Elegir un wallet compatible con EIP-155 es la forma más sencilla de protegerse.


