Una vulnerabilidad crítica en Sudo permite a usuarios ganar privilegios de root en casi cualquier distribución Linux

Sudo es una herramienta de Unix, de Linux, que permite a un administrador de sistemas llevar a cabo determinados cambios y acciones que están limitados para los usuarios normales con la capacidad de ejecutar todos comandos como root u., mientras proporciona un seguimiento de auditoría de los comandos y sus argumentos.

Un usuario normal, sin privilegios, puede utilizar el comando Sudo para actuar como root y para ello debe tener permisos o conocer la contraseña del administrador.

Fue descubierta el pasado 13 de enero por parte de un grupo de investigadores de seguridad una vulnerabilidad crítica en sudo, denominada Baron Samedit por sus descubridores e identificada con el CVE-2021-3156, con un Heap-based Buffer Overflow que permite una escalada de privilegios a la raíz a través de «sudoedit -s» y un argumento de línea de comandos que termina con un único carácter de barra invertida.

Este fallo permite a un usuario local aprovechar sudo para elevar los privilegios a root siempre que el archivo sudoers (normalmente / etc / sudoers) esté presente, sin permisos de administrador, y sin requerir ningún tipo de autenticación para llevar a cabo cualquier cambio o acción que quisiera.

Cuando sudo ejecuta un comando en modo shell, ya sea a través de la opción de línea de comando -s o -i, escapa los caracteres especiales en los argumentos del comando con una barra invertida. El complemento de política de sudoers eliminará los caracteres de escape de los argumentos antes de evaluar la política de sudoers (que no espera los caracteres de escape) si el comando se ejecuta en modo shell.

Un error en el código que elimina los caracteres de escape se leerá más allá del último carácter de una cadena si termina con un carácter de barra invertida sin escape. En circunstancias normales, este error sería inofensivo ya que sudo ha escapado de todas las barras invertidas en los argumentos del comando. Sin embargo, debido a un error diferente, esta vez en el código de análisis de la línea de comandos, es posible ejecutar sudoedit con las opciones -s o -i, estableciendo una bandera que indica que el modo de shell está habilitado. Debido a que un comando no se está ejecutando realmente, sudo no escapa a los caracteres especiales. Finalmente, el código que decide eliminar los caracteres de escape no verificaba si realmente se está ejecutando un comando, solamente que el indicador de shell está configurado. Esta inconsistencia es lo que hace que el error sea explotable.

Producto afectado

  • Sudo desde la 1.8.2, hasta la 1.8.31p2;
  • Sudo desde la 1.9.0, hasta la 1.9.5p1.

Algunas distribuciones y versiones afectadas

Pruebas realizadas en algunas de las distribuciones más populares obtuvieron privilegios de root completos.

  • Ubuntu 20.04 (Sudo 1.8.31)
  • Debian 10 (Sudo 1.8.27)
  • Fedora 33 (Sudo 1.9.2)
  • En otros sistemas operativos y distribuciones basados en Unix y similares, probablemente también sean explotables.

Recomendaciones

  • Para probar si su sistema es vulnerable, ejecute el siguiente comando en una terminal.
    • Si la respuesta es «sudoedit:», entonces el sistema es vulnerable.
    • Si la respuesta empieza por «usage:», entonces el sistema no es vulnerable.
  • Actualice a la versión igual o superior a sudo 1.9.5p2, disponible en su sitio web oficial.
  • También se puede encontrar en actualizaciones de software de su distribución de Linux, entre los nuevos paquetes disponibles.

Referencias

Compartir: