Resumen

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).