Translated message

A translation of this page exists in English.

Truncamiento de enteros y desbordamiento de vulnerabilidades en Git (CVE-2016-2315, CVE-2016-2324)

Red Hat Product Security ha tenido conocimiento de vulnerabilidades en Git donde un error de truncamiento de enteros (CVE-2016-2315) y un error de desbordamiento de enteros (CVE-2016-2324) pudo conducir a un desbordamiento de búfer basado en heap y como consecuencia, a una ejecución de código remota.

Visión General
Git usa un formato especial para intercambiar información de repositorios entre el servidor y los clientes. Dicho formato se conoce como el formato packfile.

Un atacante pudo crear un packfile diseñado especialmente para que cuando fuera enviado a un servidor o cliente vulnerable, pudiera producir un truncamiento de enteros o desbordamiento cuando se estuviera procesando, resultando en corrupción de memoria.

Información de fondo

Git es un sistema de control de revisiones distribuido con una arquitectura descentralizada. Contrario a los sistemas de control de versión centralizados con un modelo de servidor de clientes, Git garantiza que cada copia de trabajo de un repositorio Git sea una copia exacta del historial de revisiones. Este hecho no solamente permite al usuario trabajar en proyectos y contribuir en ellos sin la necesidad de tener permiso para enviar los cambios a sus repositorios oficiales, sino también hace posible que el usuario trabaje desconectado de la red.

Versiones afectadas

Las versiones de Red Hat publicadas y las versiones de Git que reciben soporte para Red Hat Enterprise Linux y Red Hat Software Collections están afectadas, como se anotó en la lista de los productos afectados dentro de la sección Resolución. Además, también se ven afectadas por estas fallas, todas las versiones de la corriente principal de desarrollo de Git anteriores a las versiones 2.4.11, 2.5.5, 2.6.6 y 2.7.4.

Descripción del ataque e impacto

La causa principal de las vulnerabilidades son un problema de truncamiento de enteros y un desbordamiento de enteros dentro de la función path_name() en el archivo fuente revision.c, el cual es utilizado por Git para procesar la información de rutas. La debilidad es que esta función no puede limpiar completamente los datos maliciosos que se han recibido como parte de un packfile especialmente diseñado de Git enviado por un atacante, antes de procesarlo, lo cual conduce a la corrupción de memoria y, posiblemente, a la ejecución de código arbitrario.

Git utiliza internamente el formato packfile para intercambiar información de repositorios. Git usa herramientas de ayudante para generar packfiles y enviarlos o recibirlos a través de los puntos finales de Git y un atacante podría crear un paquete especialmente diseñado que contenga un nombre de ruta largo (231 bytes, aproximadamente 2 gigabytes) o un árbol de elementos de rutas que podrían activar las vulnerabilidades en la función path_name()durante el procesamiento.

Uno de estos packfile ha sido creado y enviado públicamente. Puede ser utilizado para atacar tanto a clientes como servidores.

Para atacar a un servidor vulnerable, un atacante tendría que actuar como un cliente Git y enviar el paquete diseñado especialmente al servidor vulnerable, por ejemplo como parte de una operación push . El servidor vulnerable recibiría el packfile desde el cliente Git malicioso y durante el procesamiento la información de ruta contenida, activaría las vulnerabilidades en la función path_name(). Por lo general, una operación tal requiere autenticación. El atacante tendría que pasar con éxito esta autenticación para que el ataque pueda realizarse.

Para atacar a un cliente, el atacante podría establecer un repositorio Git malicioso en un servidor Git y engañar a un usuario poco suspicaz para que clone el repositorio. El cliente luego descargaría el packfile malicioso del servidor y, como consecuencia, activaría las vulnerabilidades al tratar de procesarlo.

Aunque el tamaño crudo, no comprimido del packfile estaría alrededor de 2 gigabytes debido al requerimiento de datos de ruta amplia, esto no significa que un atacante debería enviar múltiples gigabytes de datos por la red. Debido a la compresión utilizada internamente por el formato packfile y la compresión en potencia según el mecanismo de transporte (por ejemplo SSH), puede ser posible aprovechar las vulnerabilidades con solo 200 megabytes del total de los datos de red transferidos.

Resolución
A todos los usuarios de Git se les recomienda poner al día sus sistemas con estos paquetes actualizados, los cuales contienen los parches adaptados a versiones anteriores para corregir estos problemas. Antes de aplicar esta actualización, asegúrese de que todas las erratas relevantes publicadas para su sistema hayan sido aplicadas.

Producto Paquete Recomendación
Red Hat Enterprise Linux 6 git RHSA-2016-0496
Red Hat Enterprise Linux 7 git RHSA-2016-0496
Red Hat Software Collections git19-git RHSA-2016-0497

Preguntas frecuentes

Ejecuto un servidor Git. ¿Qué riesgo corro?

Usted es vulnerable si un atacante es capaz de enviar datos maliciosos a un repositorio Git alojado. Si se requiere autenticación, el individuo tendría que pasar con éxito la autenticación.

Ejecuto un cliente Git. ¿Qué riesgo corro?

Un atacante podría engañarlo para que clone de un repositorio Git comprometido o no confiable a fin de aprovechar esta vulnerabilidad.