😎 Rebajas de verano - Hasta un 50% de descuento en las selecciones de acciones de la IA de InvestingProQUIERO MI OFERTA

¿Qué es un “Re-entrancy attack”? Aprende como evitarlo en tus smart contracts

Publicado 08.10.2023, 11:08 a.m
¿Qué es un “Re-entrancy attack”? Aprende como evitarlo en tus smart contracts

¿Has oído hablar de los ataques de reentrancia en contratos inteligentes y cómo estos pueden comprometer millones en fondos? Descubre qué son, cómo han impactado a la comunidad blockchain en el pasado y las estrategias esenciales para proteger tus activos.***

  • Vulnerabilidad de reentrancia permite múltiples retiros antes de actualizar el estado del contrato.
  • El ataque al DAO en 2016, que perdió USD $50 millones y a Stars Arena que perdió USD $3 millones, utilizó esta vulnerabilidad.
  • Enseñamos en que consiste el ataque y como evitarlo para que tus Smart Contracts no sufran de esta vulnerabilidad
  • La protección incluye seguir el patrón “checks-effects-interactions” y usar semáforos.
Un ataque de reentrancia es una vulnerabilidad de seguridad en contratos inteligentes, principalmente asociada con Ethereum y blockchains que utilizan máquinas virtuales compatibles con Ethereum, como es el caso del C-Chain de Avalanche y otras.

Esta vulnerabilidad permite a un atacante retirar fondos repetidamente antes de que el contrato original pueda actualizar su estado.

La reentrancia ocurre cuando una función externa es llamada y, antes de que esta función complete su ejecución, vuelve a invocar la función que la llamó.

Vamos a descomponerlo paso a paso:

  • Función vulnerable: Imagina que tienes un contrato que permite a los usuarios retirar fondos. Cuando un usuario solicita un retiro, el contrato primero envía los fondos y luego actualiza el saldo interno del usuario.
  • Llamada externa: La vulnerabilidad se desencadena cuando, durante el proceso de envío de fondos (antes de que el saldo interno se actualice), el contrato llama a una función externa, que podría ser otro contrato o dirección controlada por un atacante.
  • Reentrancia: En lugar de simplemente recibir los fondos, la función externa invocada puede volver a llamar a la función de retiro original. Dado que el saldo interno del usuario original aún no se ha actualizado, la función de retiro piensa que todavía hay fondos disponibles y permite otro retiro. Esta reentrancia puede repetirse múltiples veces en una sola transacción, drenando más fondos de los que deberían ser permitidos.
  • Actualización del estado: Finalmente, después de que todas las llamadas reentrantes se hayan completado, el contrato original actualizará el saldo del usuario. Pero para ese momento, el daño ya está hecho y los fondos han sido drenados.
  • El ataque de reentrancia fue infamemente utilizado en el ataque al DAO el 17 de junio de 2016, resultando en la pérdida de aproximadamente USD $50 millones en Ether Esto eventualmente llevó a una bifurcación dura en Ethereum, creando Ethereum Classic y Ethereum. Este fin de semana, el contrato de Stars Arena fue víctima de esta vulnerabilidad y USD $3 millones fueron drenados del valor del contrato.

    Como evitar esta vulnerabilidad

    Para proteger un contrato contra ataques de reentrancia, es crucial:

    • Utilizar patrones como “checks-effects-interactions”, lo que significa que primero se deben hacer todas las verificaciones, luego actualizar los estados y, finalmente, interactuar con otros contratos.
    • Emplear semáforos o bloqueos para evitar que una función se llame reentrante mientras todavía se está ejecutando.
    • Estar al tanto de las actualizaciones y las mejores prácticas en la seguridad de contratos inteligentes.
    Si eres un desarrollador nuevo en blockchain, es fundamental que revises y pruebes a fondo cualquier contrato en busca de vulnerabilidades de reentrancia antes de desplegarlo en una red principal.

    Observemos en la práctica como luce una función que permite re-entrar y luego la arreglamos para evitar la vulnerabilidad.

    Ejemplo vulnerable

    En este contrato, un atacante podría crear un contrato que reentrante al método retirar en su fallback, permitiendo al atacante retirar más Ether del esperado.

    Ejemplo arreglado Para arreglarlo, podemos seguir el patrón “checks-effects-interactions”.

    Primero verificamos las condiciones, luego actualizamos el estado y, finalmente, hacemos las interacciones externas.

    Con este cambio, incluso si hay un intento de reentrancia, el balance del usuario ya habrá sido actualizado y el segundo retiro no se permitirá debido a la condición retirar.

    Imágenes originales de DiarioBitcoin, de uso libre, licenciadas bajo Dominio Público

    Artículo original de Diariobitcoin

    Leer más en Diario Bitcoin

    Últimos comentarios

    Instala nuestra app
    Aviso legal: Las operaciones con instrumentos financieros o criptomonedas implican un elevado riesgo, incluyendo la pérdida parcial o total del capital invertido, y pueden no ser adecuadas para todos los inversores. Los precios de las criptomonedas son extremadamente volátiles y pueden verse afectados por factores externos de tipo financiero, regulatorio o político. Operar sobre márgenes aumenta los riesgos financieros.
    Antes de lanzarse a invertir en un instrumento financiero o criptomoneda, infórmese debidamente de los riesgos y costes asociados a este tipo operaciones en los mercados financieros. Fije unos objetivos de inversión adecuados a su nivel de experiencia y su apetito por el riesgo y, siempre que sea necesario, busque asesoramiento profesional.
    Fusion Media quiere recordarle que la información contenida en este sitio web no se ofrece necesariamente ni en tiempo real ni de forma exacta. Los datos y precios de la web no siempre proceden de operadores de mercado o bolsas, por lo que los precios podrían diferir del precio real de cualquier mercado. Son precios orientativos que en ningún caso deben utilizarse con fines bursátiles. Ni Fusion Media ni ninguno de los proveedores de los datos de esta web asumen responsabilidad alguna por las pérdidas o resultados perniciosos de sus operaciones basados en su confianza en la información contenida en la web.
    Queda prohibida la total reproducción, modificación, transmisión o distribución de los datos publicados en este sitio web sin la autorización previa por escrito de Fusion Media y/o del proveedor de los mismos. Todos los derechos de propiedad intelectual están reservados a los proveedores y/o bolsa responsable de dichos los datos.
    Fusion Media puede recibir contraprestación económica de las empresas que se anuncian en la página según su interacción con éstas o con los anuncios que aquí se publican.
    Este aviso legal está traducido de su texto original en inglés, versión que prevalecerá en caso de conflicto entre el texto original en inglés y su traducción al español.
    © 2007-2024 - Fusion Media Ltd. Todos los Derechos Reservados.