Se han identificado vulnerabilidades en el administrador de paquetes Guix (CVE no asignados) en la implementación del comando interno «guix substitute», que es invocado automáticamente por el proceso en segundo plano guix-daemon al realizar operaciones de instalación de paquetes. Este comando se utiliza para descargar paquetes binarios ya construidos desde servidores externos, verificando su integridad mediante una firma digital. La vulnerabilidad más crítica permite ejecutar código de forma remota en el sistema del usuario con los mismos derechos con los que se ejecuta el proceso en segundo plano guix-daemon.
El problema afecta a todas las configuraciones con el proceso guix-daemon, independientemente de si se ejecuta con privilegios de root o bajo un usuario no privilegiado. Para explotar la vulnerabilidad, basta con cualquier intento de cargar paquetes binarios preparados desde servidores, controlado por el atacante. Además, el contenido malicioso servidor no necesariamente tiene que ser seleccionado o especificado explícitamente en la configuración del usuario; puede definirse mediante la opción «—discover», lo que permite sustituir el servidor durante un ataque MITM. En configuraciones donde guix-daemon se ejecuta con privilegios elevados, un usuario local puede llevar a cabo un ataque al poder conectarse al proceso en segundo plano a través de un socket Unix (que, por defecto, está disponible para todos los usuarios).
La vulnerabilidad se encuentra en el manejador «restore-file», utilizado para descomprimir a medida que se carga un paquete, sin esperar a que se complete la carga y verificación del archivo comprimido mediante la firma digital. El problema se debe a la falta de verificación de la presencia de caracteres «.», «/» y «..» en las rutas de archivos dentro del archivo comprimido. Al insertar nombres de archivos incorrectos en el archivo comprimido, el atacante puede lograr que se escriba un archivo arbitrario en cualquier área del sistema de archivos, según los permisos con los que se ejecute el proceso en segundo plano guix-daemon.
Para ejecutar su código en el sistema, por ejemplo, se puede agregar un script de arranque automático, como «~/ .bashrc» o «~/ .profile», o modificar el archivo «~/ .ssh/authorized_keys» con claves SSH. Si en un sistema multiusuario guix-daemon se ejecuta bajo el usuario root, el atacante puede sobreescribir archivos con contraseñas o scripts del sistema.
La posibilidad de crear servidores sustitutos para la distribución de paquetes maliciosos se debe a que el procedimiento de carga de metadatos (narinfo) sobre los paquetes binarios disponibles (fetch-narinfos) no realizaba la verificación del certificado del servidor, confiando en que la mayor parte de los metadatos estaba firmada digitalmente. Resultó que la firma no abarcaba la URL para la descarga del paquete, lo que permitía cambiarla sin violar la integridad de los metadatos. En última instancia, el paquete sustituto sería descartado debido a que no pasaría la verificación de su contenido por el hash firmado digitalmente, pero esta revisión se llevaba a cabo tras la etapa de descompresión, en la que se manifestaba el problema con los caracteres especiales en los nombres de archivos.
Además del comando «guix substitute», el manejador vulnerable «restore-file» se utiliza en el funcionamiento de los comandos «guix offload», «guix archive —extract» y «guix challenge», a través de los cuales también se puede explotar la vulnerabilidad. Como solución para bloquear la vulnerabilidad se sugiere especificar explícitamente la opción «—no-substitutes» en todos los comandos de guix. La corrección de la vulnerabilidad ha sido incorporada a la base de código de Guix. Se recomienda a los usuarios que instalen de inmediato las actualizaciones generadas por los desarrolladores de guix y guix-daemon.
Además del problema mencionado, se han solucionado otras tres vulnerabilidades en Guix:
- Posibilidad de sustituir paquetes binarios debido a la falta de verificación de correspondencia entre el paquete solicitado y los metadatos devueltos en el manejador fetch-narinfos. La vulnerabilidad puede ser utilizada para entregar una versión obsoleta del paquete solicitado, que contiene vulnerabilidades.
- Detección del contenido de la primera línea de archivos arbitrarios en el sistema mediante el envío de una solicitud de un usuario local con el URI «file://» («—substitute-urls file:///etc/shadow»). Si guix-daemon se ejecuta con privilegios de root, leerá el archivo solicitado, determinará que no son metadatos y generará un error, en el texto del cual se mencionará la línea que no se pudo analizar.
- Especificar un nombre de repositorio externo estructurado («..../newfile») al ejecutar los comandos «guix pull» y «guix time-machine» permite registrar datos con información sobre el commit en un archivo existente arbitrario en el sistema de archivos, siempre que su contenido se asemeje a una lista de cadenas en el lenguaje Scheme. La vulnerabilidad puede ser utilizada para ataques de DoS, pero no se descarta que a través de manipulaciones ingeniosas con el pseudo-Sistema de Archivos /proc se puedan lograr manipulaciones más peligrosas en el sistema.
Fuente: opennet.ru
