Hardening de binarios (VII) – Format Strings

Aunque las vulnerabilidades causadas por el uso indebido de format strings nos pueden parecer un tema del siglo pasado, una pequeña búsqueda en la base de datos de CVEs nos muestra que estos errores siguen pasando.

El peligro de los format string viene dado cuando no se verifica correctamente una entrada (de red, de un usuario etc) y esta se pasa a funciones inseguras de la familia de printf, que no comprueban los límites de la entrada a formatear, permiten format strings peligrosos, o el programador se olvida de poner un format string. En este último caso, si la entrada maliciosa tuviera un %s, podríamos ver el contenido de una dirección de memoria, con un %x podríamos ver el contenido de la pila y con %n podríamos escribir un valor en memoria.

En el año 2001 ya se presentaban las primeras defensas, como FormatGuard , para prevenir exploits causados por esta clase de errores, hoy en día todos los compiladores modernos nos pueden avisar del uso indebido de format strings o de funciones peligrosas (otra cosa es que nos olvidemos de compilar con estos warnings). En GCC podemos utilizar las opciones -Wformat -Wformat-security -Werror=format-security para que nuestros programas no sean susceptibles a esta clase de errores.

Irene Díez
Acerca de
Investigadora de DT
Expertise: Operating systems, program analysis