Vulnerabilidad en Windows, si Git LFS (CVE-2022-24826)
Fecha de publicación:
20/04/2022
En Windows, si Git LFS opera en un repositorio malicioso con un archivo "..exe" así como un archivo llamado "git.exe", y "git.exe" no se encuentra en "PATH", el programa "..exe" se ejecutará, permitiendo al atacante ejecutar código arbitrario. Esto no afecta a los sistemas Unix. Del mismo modo, si el repositorio malicioso contiene archivos llamados "..exe" y "cygpath.exe", y "cygpath.exe" no es encontrado en el "PATH", el programa "..exe" será ejecutado cuando sean ejecutados determinados comandos Git LFS. Más generalmente, si el directorio de trabajo actual contiene cualquier archivo con un nombre base de "." y una extensión de archivo de "PATHEXT" (excepto ".bat" y ". cmd"), y también contiene otro archivo con el mismo nombre base que un programa que Git LFS pretende ejecutar (como "git", "cygpath", o "uname") y cualquier extensión de archivo de "PATHEXT" (incluyendo ".bat" y ".cmd"), entonces, en Windows, cuando Git LFS intente ejecutar el programa previsto el archivo "..exe", "..com", etc., será ejecutado en su lugar, pero sólo si el programa deseado no es encontrado en ningún directorio de la lista "PATH". La vulnerabilidad ocurre porque cuando Git LFS detecta que el programa que pretende ejecutar no se presenta en ningún directorio listado en "PATH" entonces Git LFS pasa una cadena vacía como la ruta del archivo ejecutable al paquete Go "os/exec", que contiene un error tal que, en Windows, antepone el nombre del directorio de trabajo actual (es decir, ".") a la cadena vacía sin añadir un separador de ruta, y como resultado busca en ese directorio un archivo con el nombre base "." combinado con cualquier extensión de archivo de "PATHEXT", ejecutando el primero que encuentre. (La razón por la que los archivos "..bat" y "..cmd" no son ejecutados de la misma manera es que, aunque el paquete Go "os/exec" intenta ejecutarlos igual que un archivo "..exe", la familia de funciones "CreateProcess()" de la API de Microsoft Win32 presenta una característica no documentada en la que aparentemente reconocen cuando quien llama está intentando ejecutar un archivo de script por lotes y en su lugar ejecutan el intérprete de comandos "cmd.exe", pasando el conjunto completo de argumentos de la línea de comandos como parámetros. Estos no son modificados con respecto a los argumentos de línea de comandos establecidos por Git LFS, y como tal, el nombre del programa previsto es el primero, resultando en una línea de comandos como "cmd.exe /c git", que entonces falla). Git LFS ha resuelto esta vulnerabilidad informando siempre de un error cuando un programa no es encontrado en ningún directorio listado en "PATH" en lugar de pasar una cadena vacía al paquete Go "os/exec" en este caso. El bug en el paquete Go "os/exec" ha sido reportado al proyecto Go y es esperado que sea parcheado después de la publicación de este aviso de seguridad. El problema fue introducido en versión 2.12.1 y está parcheado en la versión 3.1.3. Los usuarios de las versiones afectadas deben actualizar a la versión 3.1.3. Actualmente no se presentan medidas de mitigación a este problema
Gravedad CVSS v3.1: ALTA
Última modificación:
28/04/2022