Se han publicado versiones corregidas de los sistemas de control de versiones distribuidos Git 2.39.1, 2.38.3, 2.37.5, 2.36.4, 2.35.6, 2.34.6, 2.33.6, 2.32.5, 2.31.6 y 2.30.7, en las que se han corregido dos vulnerabilidades que permiten la ejecución de código arbitrario en el sistema del usuario al utilizar el comando «git archive» y al trabajar con repositorios externos no confiables. Las vulnerabilidades se deben a errores en el formato de los commits y el análisis del archivo «.gitattributes», que durante el manejo de repositorios externos pueden dar lugar a escrituras en áreas de memoria fuera del montón y a la lectura de datos arbitrarios de la memoria.
Ambas vulnerabilidades se identificaron durante una auditoría de seguridad de la base de código de Git realizada por la empresa X41 por encargo del fondo OSTIF (Open Source Technology Improvement Fund), creado con el objetivo de mejorar la seguridad de proyectos de código abierto. Además de los dos problemas críticos que se analizan a continuación, la auditoría también encontró una vulnerabilidad peligrosa, una vulnerabilidad de gravedad media y cuatro problemas no peligrosos. Se emitieron 27 recomendaciones para mejorar la seguridad de la base de código.
- CVE-2022-41903: desbordamiento de enteros en el código de formato de la información de los commits, que ocurre al procesar grandes valores de desplazamiento en los operadores de relleno, como «%<(», «%(», «%>>(» y «%><( )». El desbordamiento de enteros ocurre en la función format_and_pad_commit() debido al uso de un tipo int para la variable size_t, que participa en la determinación del tamaño del bloque que se copió durante la llamada a memcpy().
La vulnerabilidad se manifiesta tanto en la llamada directa con parámetros de formato especialmente preparados (por ejemplo, al ejecutar «git log —format=…»), como en la aplicación indirecta de formato durante la ejecución del comando «git archive» en un repositorio controlado por el atacante. En este segundo caso, los modificadores de formato se establecen a través del parámetro export-subst en el archivo «.gitattributes», que puede ser colocado por el atacante en su repositorio. El problema puede ser utilizado para leer y escribir en áreas arbitrarias del montón y permitir la ejecución de código malicioso al trabajar con repositorios no verificados.
- CVE-2022-23521: desbordamientos de enteros al analizar el contenido de los archivos «.gitattributes» en el repositorio, que se manifiestan al procesar un gran número de patrones de rutas de archivos o un gran número de atributos con un solo patrón, así como al analizar nombres de atributos muy grandes. El problema puede ser utilizado para leer y escribir áreas arbitrarias en la memoria y llevar a la ejecución de código malicioso al trabajar con un repositorio no verificado, en el que un atacante puede colocar un archivo .gitattributes especialmente diseñado y asegurar su inclusión en el índice.
Se puede seguir la publicación de actualizaciones de paquetes en las distribuciones en las páginas: Debian, Ubuntu, Gentoo, RHEL, SUSE, Arch, FreeBSD, NetBSD. Para reducir el riesgo de un ataque en caso de no poder instalar una actualización a tiempo, se recomienda abstenerse de trabajar con repositorios no confiables y de utilizar el comando «git archive». Es importante recordar que el comando «git archive» puede ejecutarse implícitamente, por ejemplo, desde el git daemon. Para desactivar la ejecución de «git archive» en git daemon, se debe cambiar el parámetro daemon.uploadArch con el comando «git config —global daemon.uploadArch false».
Adicionalmente, se puede mencionar otra vulnerabilidad (CVE-2022-41953) en el producto Git para Windows, que permite la ejecución de código al clonar a través de la interfaz gráfica repositorios externos no verificados. El problema se debe a que Git GUI para Windows, después de la operación «checkout», ejecuta automáticamente algunos comandos de post-procesamiento, como la ejecución del programa spell-check para verificar la ortografía, dado que los caminos de búsqueda del archivo spell-check abarcan también el árbol de trabajo clonado (el ataque se reduce a agregar spell-check al árbol de trabajo del repositorio).
Fuente: opennet.ru
