Una vulnerabilidad crítica en sudo permite obtener privilegios de root
Los investigadores de seguridad de Qualys han identificado una vulnerabilidad crítica (CVE-2021-3156) en la utilidad sudo, que está diseñada para organizar la ejecución de comandos en nombre de otros usuarios.
La vulnerabilidad permite el acceso no autenticado con privilegios de root. El problema puede ser aprovechado por cualquier usuario, independientemente de la presencia en los grupos del sistema y la presencia de una entrada en el archivo /etc/sudoers.
El ataque no requiere ingresar la contraseña del usuario, es decir, la vulnerabilidad puede ser utilizada por una persona externa para elevar los privilegios en el sistema después de que la vulnerabilidad se haya visto comprometida en un proceso sin privilegios (incluidos los iniciados con el usuario «nobody»).
Para buscar una vulnerabilidad en su sistema, simplemente se debe ejecutar el comando «sudoedit -s /» y la vulnerabilidad está presente si se muestra un mensaje de error que comienza con «sudoedit:».
Sobre la vulnerabilidad
La vulnerabilidad ha aparecido desde julio de 2011 y es causada por un desbordamiento del búfer en el manejo de caracteres de escape de línea en parámetros destinados a ejecutar comandos en modo shell. El modo de shell se habilita especificando los argumentos «-i» o «-s» y hace que el comando no se ejecute directamente, sino a través de una llamada de shell adicional con el indicador «-c» («comando sh -c»).
El quid del problema es que cuando se ejecuta la utilidad sudo normalmente, escapa los caracteres especiales al especificar las opciones «-i» y «-s», pero cuando se inicia la utilidad sudoedit, los parámetros no se escapan, ya que parse_args () La función establece la variable de entorno MODE_EDIT en lugar de MODE_SHELL y no restablece el valor de «valid_flags».
A su vez, la transmisión de caracteres sin escape crea condiciones para que aparezca otro error en el controlador, lo que elimina los caracteres de escape antes de verificar las reglas de los sudoers.
El manejador analiza incorrectamente la presencia de un carácter de barra invertida sin escape al final de la línea, considera que esta barra invertida escapa un carácter más y continúa leyendo datos más allá del límite de la línea, copiándolos en el búfer «user_args» y sobrescribiendo áreas de memoria fuera del buffer.
Y es que se menciona que al tratar de manipular los valores en la línea de comando sudoedit, el atacante puede lograr la superposición de una cola regrabable en los datos que afectan el curso posterior del trabajo.
Además de que la creación de un exploit simplifica el hecho de que el atacante tiene un control completo sobre el tamaño del búfer user_args, que corresponde al tamaño de todos los argumentos pasados, y también controla el tamaño y el contenido de los datos escritos fuera del búfer mediante variables de entorno.
Los investigadores de seguridad de Qualys lograron preparar tres exploits, cuyo trabajo se basa en reescribir el contenido de las estructuras sudo_hook_entry, service_user y def_timestampdir:
- Anulando sudo_hook_entry se pudo ejecutar un binario llamado «SYSTEMD_BYPASS_USERDB» como root.
- Overriding service_user logró ejecutar código arbitrario como root.
- Al anular def_timestampdir, fue posible vaciar el contenido de la pila sudo, incluidas las variables de entorno, en el archivo /etc/passwd, y lograr la sustitución del usuario con privilegios de root.
Los investigadores han demostrado que los exploits funcionan para obtener privilegios de root completos en Ubuntu 20.04, Debian 10 y Fedora 33.
La vulnerabilidad puede explotarse en otros sistemas operativos y distribuciones, pero la verificación de los investigadores se limitó a Ubuntu, Debian y Fedora, además de que se menciona que todas las versiones de sudo 1.8.2 a 1.8.31p2 y 1.9.0 a 1.9.5p1 en la configuración predeterminada se ven afectadas. Se sugirió una solución en sudo 1.9.5p2.
Los investigadores han notificado con antelación a los desarrolladores de distribución que ya han publicado las actualizaciones de paquetes de forma coordinada: Debian, RHEL, Fedor , Ubuntu, SUSE/openSUSE, Arch Linux, Slackware, Gentoo y FreeBSD.
Finalmente si estás interesado en conocer más al respecto sobre la vulnerabilidad, puedes consultar los detalles en el siguiente enlace.