domingo, 26 de septiembre de 2010

Fallo de regresión en el paquete git-core de Debian Lenny

Debian ha publicado una actualización del paquete git-core en el que corrige un error de regresión que impide a los usuarios clonar un repositorio.

El paquete git-core contiene los componentes principales del sistema de control de versiones Git, empleado para proyectos de código de gran magnitud y con una amplia base de contribuyentes.

Git es el sistema usado para administrar el código fuente del núcleo Linux. De hecho fue el propio Linus Torvalds quien comenzó el proyecto, debido en parte a las carencias que encontraba en otros sistemas de control de versiones.

El error introducido impide a los usuarios crear o clonar repositorios debido a los permisos, demasiado estrictos, asignados a las plantillas de git localizadas en: /usr/share/git-core.

Cuando un usuario crea o clona un repositorio el comando usado intenta leer una plantilla pero debido a los permisos sólo se permite la lectura al usuario root.

El problema de seguridad original que corregía el boletín afectaba a git-core y permitía a un atacante ejecutar código arbitrario a través de un archivo .git especialmente manipulado.

La vulnerabilidad, con CVE-2010-2542, residía en la falta de comprobación del tamaño de una cadena que contiene el valor de la variable gitdir. La función afectada es 'is_git_directory' de 'setup.c'.

En el código original se observa que tras obtener la longitud de la cadena en 'suspect' no se compara con el tamaño máximo del búfer de pila reservado en 'path' y definido en 'PATH_MAX'.

char path[PATH_MAX];
size_t len = strlen(suspect);
strcpy(path, suspect);

Esto permite sobreescribir datos de la pila rebasando el tamaño definido en 'PATH_MAX' a través de 'suspect' que a su vez es inicializado con valor obtenido del archivo .git leido.

El parche incluye la comprobación del valor obtenido para evitar el desbordamiento:

char path[PATH_MAX];
size_t len = strlen(suspect);
if (PATH_MAX <= len + strlen("/objects"))
die("Too long path: %.*s", 60, suspect);
strcpy(path, suspect);



David García
dgarcia@hispasec.com



No hay comentarios:

Publicar un comentario en la entrada