The post Problemas de comunicacion entre lenguajes appeared first on S3lab.
]]>Sin embargo, los lenguajes de alto nivel dependen de sus sistemas de tiempo de ejecución para tener acceso a funcionalidad, como por ejemplo una interfaz con el procesador o acceso al sistema de ficheros o a funciones de red, que de otra forma no sería posible. Uno de los ejemplos más populares es Node.js para ejecutar Javascript en el lado servidor. Dichos sistemas de tiempo de ejecución están normalmente escritos en C/C++, lenguajes conocidos por no garantizar la seguridad de la memoria ni la seguridad de tipos, lo que quiere decir que son propensos a errores y un objetivo para los atacantes.
Para interactuar entre dos lenguajes de distinto nivel como Javascript y C++ que tienen distintas estrategias de gestión de la memoria, sistema de tipos, etc., es necesaria una capa intermedia encargada de transformar los tipos y la representación de los valores de forma adecuada para el lenguaje destino, además de propagar los errores producidos. Los problemas aparecen debido a que, en las funciones de la capa intermedia, se deben hacer comprobaciones tales como verificar el tipo de los parámetros, comprobar que los valores son «legales» (como que un índice se encuentre dentro de los límites de un array), que no se hacen en todos los casos, lo que conlleva que se produzcan errores que atentan contra la seguridad de la memoria y la seguridad de tipos.
Tomando como ejemplo la imagen anterior, podemos ver como en la capa superior se han introducido comprobaciones para asegurar que los valores de start y end se encuentran dentro de los límites del buffer antes de llamar a la implementación de fill en la capa intermedia. Por otra parte, el código C++ presupone que los valores de start y end recibidos por parámetros son enteros de 32 bits sin signo.
Esta situación se puede aprovechar pasando un objeto, en lugar de un número, como valor start que ejecute la función Symbol.toPrimitive definida cuando se intente obtener su valor númerico. De esta forma, la comprobación en la capa superior se hará sin ningún problema devolviendo un 0, pero al obtener el valor en la capa intermedia se devolverá un número negativo, dando lugar a un overflow
The post Problemas de comunicacion entre lenguajes appeared first on S3lab.
]]>The post Los errores de corrupción de memoria appeared first on S3lab.
]]>Sin embargo, la corrupción de memoria abarca todo tipo de alteración involuntaria que se produce en el contenido de una o varias direcciones de memoria, como sucede al operar con un array fuera de sus límites. Por otra parte, dentro de los errores de corrupción de memoria también se incluyen aquellos que producen comportamientos indefinidos o revelación de información al hacer un uso indebido de la propia memoria. Todos estos errores comúnmente se clasifican en dos tipos: espaciales y temporales.
Los errores espaciales son violaciones causadas al operar con un puntero que apunta a una dirección fuera de los límites, superiores o inferiores, de su referente. El buffer overflow/underflow se encuentra en esta categoría puesto que cualquier tipo de operación que resulte en un acceso de memoria fuera de los límites se considera un error espacial.
Los errores temporales se caracterizan por ser causados por el uso de un puntero cuyo referente no es un objeto válido debido a que no ha sido inicializado o ha sido liberado anteriormente (mediante una operación free). Los ejemplos más claros son el use-after-free, en el que se incluyen el double-free y la desreferencia de dangling pointers, y por otro lado el use-before-initialization, como son las lecturas no inicializadas.
Como se ha podido ver en la serie de hardening de binarios de este mismo blog, existen y se siguen desarrollando numerosas soluciones que tratan de mitigar este tipo de errores, ya que desencadenar un error de corrupción de memoria es el primer paso que toman gran cantidad de exploits.
The post Los errores de corrupción de memoria appeared first on S3lab.
]]>The post Investigación en seguridad (V) – 4 errores, 1 fracaso appeared first on S3lab.
]]>Existen más errores que podemos cometer, pero éstos son los que nos llevarán al fracaso absoluto. En la siguiente entrega hablaremos de cómo escribir una contribución y de su estructura.
The post Investigación en seguridad (V) – 4 errores, 1 fracaso appeared first on S3lab.
]]>