Crea una cuenta o inicia sesi贸n

隆Contin煤a aprendiendo sin ning煤n costo! 脷nete y comienza a potenciar tu carrera

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 0

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

El problema de los l铆mites. La falla de overflow y underflow ocurre solamente en variables de tipo 鈥渆nteras鈥. Pensemos en el 鈥渃ontador de km鈥 o el 鈥渃ontador 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 鈥渃ompilador鈥, es decir, si tenemos alguna operaci贸n con un n煤mero entero que tiene el problema de overflow, ya el 鈥渃ompilador鈥 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