Se ha identificado una vulnerabilidad (ya catalogada bajo CVE-2023-22809) en el paquete sudo, que se utiliza para ejecutar comandos en nombre de otros usuarios, lo que permite que un usuario local edite cualquier archivo en el sistema, lo que, a su vez, permite obtener derechos de root cambiando /etc/shadow o scripts del sistema.
Para aprovechar la vulnerabilidad, el usuario debe tener derecho a ejecutar la utilidad sudoedit o «sudo» con el indicador «-e» en el archivo sudoers.
Sobre el fallo se menciona que sudo (su “do”) permite que un administrador del sistema delegue autoridad para dar a ciertos usuarios (o grupos de usuarios) la capacidad de ejecutar algunos (o todos) los comandos como root u otro usuario mientras se proporciona un registro de auditoría de los comandos y sus argumentos.
La vulnerabilidad se debe a la falta de un manejo adecuado de los caracteres «–» al analizar las variables de entorno que determinan el programa llamado para editar el archivo.
En sudo, la secuencia «–» se usa para separar el editor y los argumentos de la lista de archivos que se están editando. Un atacante puede agregar «–file» a las variables de entorno SUDO_EDITOR, VISUAL o EDITOR después de la ruta al editor, lo que hará que el archivo especificado se edite con privilegios elevados sin verificar las reglas de acceso al archivo del usuario.
Sobre los detalles de la vulnerabilidad se menciona lo siguiente:
Cuando se ejeucta como sudo -eo sudoedit, sudo se puede usar para editar archivos con privilegios mientras se ejecuta el editor como un usuario sin privilegios. El archivo de política de sudoers determina si un usuario puede o no editar los archivos especificados. El comportamiento esperado es que el módulo de política de sudoers devuelva un vector de argumento al front-end de sudo que contiene el editor para ejecutar junto con los archivos que se van a editar, separados por un argumento «–«.
La secuencia de eventos es la siguiente:
- El front-end sudo envía una solicitud de verificación de política al módulo sudoers que indica que el usuario ha ejecutado e sudoeditincluye la lista de archivos que se van a editar.
- El módulo de políticas de sudoers usa el sudoersarchivo (o LDAP) para determinar si el usuario puede editar los archivos.
- Si la verificación de políticas tiene éxito, el módulo de políticas de sudoers elige un editor basado en las variables SUDO_EDITOR, VISUAL y EDITOR en el entorno del usuario.
- El módulo sudoers construye un nuevo vector de argumentos que consiste en el editor seleccionado. Si el editor contiene opciones de línea de comandos, se divide en varios argumentos.
- Se añade un separador “–” al vector de argumento, seguido de la lista de archivos que se van a editar. Este vector de argumento se devuelve al front-end de sudo.
- El front-end sudo usa el separador «–» para determinar qué archivos se van a editar. Se realizan copias temporales de los archivos con el propietario establecido para el usuario invocador.
- El front-end sudo construye un nuevo vector de argumento que consta de todos los elementos antes del separador «–» (el editor) seguido de las rutas de archivo temporales. El nuevo vector de argumento se ejecuta como el usuario que lo invoca.
- Los archivos temporales se vuelven a copiar en su ubicación original y las versiones temporales se eliminan.
- Existe una vulnerabilidad si el editor especificado por el usuario también contiene un argumento «–«. Esto engañará al front-end sudo para que trate todo lo que esté después del argumento «–» en el editor como un archivo para editar, incluso si la política de sudoers no lo permite
La vulnerabilidad ha estado presente desde la rama 1.8.0 y corregida en la actualización correctiva sudo 1.9.12p2. La publicación de actualizaciones de paquetes en distribuciones se puede ver en las páginas: Debian, Ubuntu, Gentoo, RHEL, SUSE, Fedora, Arch, FreeBSD y NetBSD.
Finalmente, se menciona que como solución de seguridad, puede deshabilitar el procesamiento de las variables de entorno SUDO_EDITOR, VISUAL y EDITOR especificando en sudoers:
Defaults!sudoedit env_delete+="SUDO_EDITOR VISUAL EDITOR"
Fuente: https://www.synacktiv.com/