Crea una cuenta o inicia sesión

¡Continúa aprendiendo sin ningún costo! Únete y comienza a potenciar tu carrera

Convierte tus certificados en títulos universitarios en USA

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

19 Días
4 Hrs
48 Min
54 Seg

Overflow y underflow

5/15
Recursos

Los problemas de seguridad pueden estar relacionados con varios aspectos del desarrollo de contratos inteligentes. Uno de ellos es el tipo de variable para almacenar datos.

Problema con las variables numéricas: overflow y underflow

Un problema de seguridad relacionado con el uso de variables enteras es el conocido como Overflow y Underflow.

Cuando una variable entera llega al límite máximo que puede representar y se le suma uno, se reinicia a cero. Caso contrario, lo mismo ocurre cuando se encuentra en su límite mínimo y se le resta uno, pasa al valor máximo que puede representar.

Por ejemplo, si una variable puede almacenar como máximo el valor 999, al sumarle uno pasará a 000 y si le restamos uno a este vuelve a 999.

Este es un problema grave de seguridad ya que si los valores se tratan de montos económicos, un atacante puede provocar que el saldo de una cuenta pase al máximo posible y robe todos los fondos de un contrato.

Evitando el overflow y el underflow

Afortunadamente, el problema ha sido resuelto a partir de la versión 0.8.0 del compilador de Solidity. Si ocurriese uno de estos tipos de errores, se lanzará una advertencia de error evitando que se pueda explotar la vulnerabilidad.

Ten en cuenta la compatibilidad hacia atrás. Contratos inteligentes que fueron desarrollados con versiones anteriores a la 0.8.0 aún tienen este problema, que puede ser resulto con librerías que hagan las respectivas validaciones como Math de OpenZeppelin.

Ten presente este problema si trabajas con versiones del compilador más antiguas y variables numéricas, tanto con signo como sin signo o de cualquier longitud.


Contribución creada por: Kevin Fiorentino (Platzi Contributor).

Aportes 4

Preguntas 1

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

El problema de los límites. La falla de overflow y underflow ocurre solamente en variables de tipo “enteras”. Pensemos en el “contador de km” o el “contador de visitas” el cual es un contador secuencial que va sumando e incrementando valores enteros de forma que cuando se alcanza el máximo valor posible representable en el contador, vuelve a empezar de cero. Por ejemplo, llegamos al máximo “999” y al siguiente incremento volvemos a iniciar de “000”. Lo mismo ocurre si volvemos hacia atrás, de “000” disminuimos un valor, nos vamos al máximo posible de este ejemplo que sería “999”.
En el caso de las variables enteras va a suceder lo mismo, porque si almacenamos un valor en cero y le restamos uno, nos iremos al máximo valor posible representable en ese tipo de variable, y eso va a depender del tamaño de número entero que hayamos elegido. Y viceversa.
Esto llevado a un balance, es una falla muy grave, dado que courriría que un balance en cero, pasaría a tener el máximo valor representable. Esto aplica a los números enteros, no importa si es con signo positivo o negativo.
Afortunadamente, desde la versión 0.8 de Solidity, este problema ya está resuelto por el “compilador”, es decir, si tenemos alguna operación con un número entero que tiene el problema de overflow, ya el “compilador” ejecuta una acción de error, por lo tanto no tenemos que preocuparnos.
Pero qué pasa… en el mundo de contratos inteligentes, encontraremos muchos contratos que están implementados en versiones anteriores del compilador y que, lamentablemente, aún cuentan con este problema.
De modo que la solución es:

  • actualizar el compilador a las últimas versiones, y llevar los contratos a la versión del compilador,
  • utilizar librerías para operar de manera segura.

Dejo por acá el curso de openZeppelin

PD: El contrato para el uso seguro de compiladores por debajo del 0.8 es el SafeMath

Yo aún veo los contadores de visitas en la páginas de las universidades nacionales :c

Vulnerabilidades del almacenamiento

Fallas con

  • Overflow y underflow: estas son fallas de tipo enteras sin importar si es con signo o sin signo, estas fallas en versiones de 0.8 de solidity nos presenta error automáticamente pero existe un problema y es que nos encontramos contratos que ya están implementados en versiones anteriores del compilador

Solución:

  • Actualizar el compilador
  • Utilizar una librería