Nueva vulnerabilidad en SUDO POC-CVE-2021-3156

El 26 de enero, salió a la luz por parte del equipo de investigación de Qualys, una vulnerabilidad de buffer overflow en “SUDO” oculta desde 2011. Esta vulnerabilidad fue introducida en julio de 2011 y afecta a las versiones 1.8.2, 1.8.31p2 y todas las versiones estables de la 1.9.0 a la 1.9.5p1.

Esta vulnerabilidad permite a cualquier usuario sin privilegios obtener permisos de root en cualquier host, independientemente del sistema, ya que afecta a Ubuntu 20.04, Debian 10 Fedora 33, entre otros.

Como funciona la vulnerabilidad

Cuando ejecutamos sudo en modo Shell podemos utilizar 2 parámetros:

-s: Indica la flag MODE_SHELL

-i: Indica las flags MODE_SHELL y MODE_LOGIN_SHELL

Y posteriormente el comando que queremos que sea ejecutado como sudo. Si comprobásemos el código de sudo, observaríamos que primero reescribe los argumentos concatenándolos en la línea de comando y escaparía los metacaracteres con “\”, después almacena los argumentos en un buffer y elimina el escape de los metacaracteres para que coincida con el sudoers y poder loguear correctamente.

Y aquí es donde viene el problema, la función que almacena los argumentos en un buffer sufre de una vulnerabilidad de desbordamiento de buffer, que permite introducir caracteres externos en dichos argumentos. Teóricamente, no podría ser utilizado ya que existen unas condiciones if que impiden que se añadan las flags MODE_SHELL o MODE_LOGIN_SHELL y nos saltaría con un error. PERO, si en vez de utilizar sudo, utilizásemos sudoedit, el código establecería automáticamente las flags necesarias.

Por lo tanto, ejecutando sudoedit -s definiríamos las flags evitando que se ejecutara la función que impide establecer las flags.

Para comprobarlo podemos utilizar el siguiente comando, en caso de recibir la misma respuesta, el host es vulnerable:

Nueva vulnerabilidad en SUDO POC-CVE-2021-3156

POC

Exploit funcional de la vulnerabilidad: 

https://github.com/blasty/CVE-2021-3156.git

Ultima versión de Ubuntu con versión 1.8.31 de sudo:

Nueva vulnerabilidad en SUDO POC-CVE-2021-3156

Como podemos observar no disponemos de permisos al no estar en el archivo sudoers:

Nueva vulnerabilidad en SUDO POC-CVE-2021-3156

El exploit nos dejará decidir entre varias versiones de Linux vulnerables:

Nueva vulnerabilidad en SUDO POC-CVE-2021-3156

Al seleccionar el target del host veremos que obtenemos root casi al instante.

Nueva vulnerabilidad en SUDO POC-CVE-2021-3156

La versión de este exploit no es invasiva, es decir, no corrompe el archivo /etc/passwd como otros exploits que operan sobre la misma vulnerabilidad.