Se ha identificado una vulnerabilidad (CVE-2024-28085) en la utilidad wall, incluida en el paquete util-linux y diseñada para enviar mensajes a terminales, que permite realizar un ataque en los terminales de otros usuarios a través de la manipulación de secuencias de escape. El problema se debe a que la utilidad wall bloquea el uso de secuencias de escape en el flujo de entrada, pero no realiza esta operación para los argumentos en la línea de comandos, lo que permite al atacante ejecutar secuencias de escape en el terminal de otros usuarios.
Por ejemplo, al ejecutar ‘wall $(printf «\033[33mHI»)’ se puede mostrar el mensaje «HI» en color amarillo. Con secuencias de escape que permiten mover el cursor, limpiar y reemplazar el contenido en la pantalla, se puede simular la presentación de un mensaje de solicitud de contraseña de la utilidad sudo en el terminal de otro usuario. Si el usuario no nota la trampa y ingresa su contraseña, la contraseña se revelará en el historial de entrada como un comando inexistente (de hecho, el usuario ingresará su contraseña en la línea de comandos en lugar de un comando). «\033[3A» // movemos el cursor hacia arriba 3 líneas «\033[K» // eliminamos la salida anterior «[sudo] password for a_user:» // mostramos una solicitud falsa de sudo «\033[?25l» // configuramos el color de fondo para ocultar la entrada «\033[38;2;48;10;36m»
Durante la salida de una advertencia de que el comando ingresado no se encontró, en muchas distribuciones se activa el controlador /usr/lib/command-not-found, que intenta determinar el paquete que contiene el comando faltante y emitir una sugerencia sobre su posible instalación. El problema es que al ejecutar el controlador command-not-found, el comando inexistente se pasa como parámetro a la línea de comandos, el cual es visible al ver los procesos en el sistema (por ejemplo, al intentar ejecutar la utilidad no instalada «xsnow», en la lista de procesos se verá «/usr/lib/command-not-found -- xsnow»). En consecuencia, el atacante puede organizar la supervisión de los procesos en ejecución (por ejemplo, analizando la aparición de «/proc/$pid/cmdline» para un número de PID previsto) y determinar la contraseña ingresada por la víctima en la línea de comandos.
Para que el usuario introduzca la contraseña en respuesta a una invitación falsa de sudo, se propone un truco que consiste en rastrear en la lista de procesos la ejecución real de la utilidad sudo, esperar a que termine y ejecutar el ataque a través de "wall" inmediatamente después de esto. A través de manipulaciones con secuencias de escape, el atacante puede reemplazar el mensaje tras la ejecución real de sudo por una invitación falsa para introducir de nuevo la contraseña. La víctima puede pensar que se ha equivocado al introducirla y volver a introducir la contraseña, exponiéndola en los argumentos del manejador "command-not-found".
Para llevar a cabo con éxito el ataque, es necesario establecer el modo "mesg" en el valor "y", que por defecto está habilitado en Ubuntu, Debian y CentOS/RHEL. La posibilidad de llevar a cabo el ataque se ha demostrado en Ubuntu 22.04 en la configuración por defecto al utilizar gnome-terminal. En Debian, el ataque es complicado, ya que el manejador "command-not-found" no está habilitado en la distribución por defecto, y en CentOS/RHEL el ataque no funcionará, ya que la utilidad wall se instala sin la bandera setgid y no tiene acceso a terminales ajenos. Al usar windows-terminal, el ataque puede ser modificado para cambiar el contenido del portapapeles.
La vulnerabilidad se manifiesta en el paquete util-linux desde 2013, después de que en la versión 2.24 se añadiera la posibilidad de especificar un mensaje en la línea de comandos de wall, pero se olvidaron de aplicar la limpieza de secuencias de escape. La corrección de la vulnerabilidad se incluyó en la reciente versión 2.40 de util-linux. Es notable que al intentar corregir la vulnerabilidad en la versión 2.39 de util-linux se identificó otra vulnerabilidad similar, que permite la sustitución de caracteres de control mediante manipulación de locales.
Fuente: opennet.ru
