Desbordamiento del buffer de memoria

LIBP-0273 (Libro de pautas)

Controlar que no se produzcan desbordamientos del buffer de memoria

Los desbordamientos del buffer de memoria siguen siendo uno de los puntos débiles más peligrosos y más comunes en aplicaciones que utilizan gestión manual de memoria.

Los intentos de explotación este tipo de vulnerabilidad pueden dar lugar a problemas como el bloqueo de la aplicación o que un atacante inserte y ejecute código malintencionado en el proceso de la aplicación.

Los desbordamientos de memoria también se encuentran en el código de las aplicaciones hechas a medida, debido a la falta de control por las que pasan estas.

Pautas

TítuloCarácter
Gestión directa de memoriaRecomendada
Valores límite de entradaObligatoria
Valores límite de salidaObligatoria
Formato de salidaObligatoria

Gestión directa de memoria

Minimizar el uso de mecanismos que gestionen la memoria de forma directa

Evitar el uso de mecanismos que permitan la gestión manual de la memoria, ya que facilitan que se cometan errores en el manejo de la misma y, por tanto, que se produzcan desbordamientos de memoria.

Por ejemplo, el uso del lenguaje C o C++, donde se permite el uso de punteros a memoria, habría que dejarlo sólo para cierto tipo de sistemas de alto rendimiento, donde se necesite programar a bajo nivel la gestión de la memoria.

Valores límite de entrada

Controlar el tamaño de las entradas

Controlar que los datos introducidos están dentro del rango de valores adecuados si son de tipo numérico y que no sobrepasan la longitud esperada en el caso de ser de tipo cadena.

Este control debe realizarse tanto en el lado del cliente como en el servidor ya que las validaciones en el cliente son vulnerables.

Valores límite de salida

Controlar la salida de los métodos

Controlar que el dato resultante de una operación está dentro del rango de valores permitidos para ese tipo de dato antes de asignarlo.

Formato de salida

No usar funciones que permitan cambiar el formato de los datos de salida

No usar funciones que permitan cambiar el formato de los datos de salida, ya que pueden provocar errores en el buffer.

Contenidos relacionados

Recursos