EDICIóN GENERAL
193 meneos
2965 clics
Una vulnerabilidad en Sudo permite ejecutar comandos root sin permiso del usuario

Una vulnerabilidad en Sudo permite ejecutar comandos root sin permiso del usuario

Una vulnerabilidad en Sudo, una de las utilidades más relevantes de Linux, permite ejecutar comandos con acceso raíz, incluso cuando estos no están autorizados por el usuario. Dicha vulnerabilidad omite la política de seguridad de sudo, permitiendo así que otros usuarios o programas ejecuten comandos root.

| etiquetas: vulnerabilidad , sudo , root , linux , seguridad
Comentarios destacados:                
#15 A ver, aclaremos un poco el tema.

Primero, para la gente que no entiende el problema, tranquilo. Si no has entendido el problema a la primera, es que no estas afectado, porque para que el ataque sea posible este requiere una configuracion bastante compleja de sudo. Sudo no permite impersonar solo al usuario root, en realidad permite impersonar a cualquier otro usuario (con los permisos adecuados, claro)

Normalmente sudo esta configurado de una forma que dice:
- El usuario A puede ejecutar como si fuera el usuario B las siguientes aplicaciones X.

En el 99.99% de los casos, usuario B es 'root', pero podria ser otro usuario, por ejemplo 'peter', y sudo estar configurado para decir:
- El usuario 'john' puede ejecutar como 'peter' la aplicacion 'ls'

Este caso es mucho mas raro, pero existe. Aun asi, este caso no es el que comenta la vulnerabilidad, sino otro mas raro aun. Sudo tambien permite declarar excepciones, por ejemplo algo como:
- El usuario 'john' puede ejecutar como 'todos…...
A ver, aclaremos un poco el tema.

Primero, para la gente que no entiende el problema, tranquilo. Si no has entendido el problema a la primera, es que no estas afectado, porque para que el ataque sea posible este requiere una configuracion bastante compleja de sudo. Sudo no permite impersonar solo al usuario root, en realidad permite impersonar a cualquier otro usuario (con los permisos adecuados, claro)

Normalmente sudo esta configurado de una forma que dice:
- El usuario A puede ejecutar…   » ver todo el comentario
#15 Gracias por la explicación
#15 Yo, como Director y por tanto jefe de los informáticos tengo acceso root a los servidores y las máquinas, sobre todo porque tengo varias máquinas virtuales para mis usos (nos presentan aplicaciones, las pruebo, doy mi visto bueno). Es política de empresa que los máximos responsables tengamos estos datos, pero sinceramente no he entendido NADA del artículo. Simplemente obedezco la máxima que me han dicho mis informáticos : JAMÁS USES SUDO O ROOT SIN PREGUNTAR.
#26 Como dice #15: si no entiendes entonces no estás en peligro. Porque si no entiendes es porque no has estado toqueteando el /etc/sudoers y por lo tanto tienes la configuración por defecto y con esa configuración no hay posibilidad de aprovechar el fallo. En #34 intento aclarar un poco el asunto.
#26 Personalmente no creo que sea la responsabilidad del director comprender estas vulnerabilidades, entiendo que tendras gente en la empresa encargada de los equipos informaticos capaz de evaluar correctamente si la vulnerabilidad os afecta o no (apostaria a que no, pero obviamente sin mirar, nunca se sabe).
#42 No lo es si el director no anda pululando como root por el sistema. Si el director no tiene ni puta idea, que ande como root por el sistema es un peligro.
#26 Precisamente porque root tiene todos los privilegios, puede acceder a todos sitios y romper (inadvertidamente o no) las cosas.

Sudo no es más que una herrmamienta que suele estar configurada para que usuarios puedan ejecutar comandos como si fueran root (y por lo tanto, potencialmente romper cosas). Es muy potente y bien configurada puede ser una forma muy segura de que cualquier usuario pueda administrar sin problemas cualquier parte del sistema sin por ello afectar a otras partes del…   » ver todo el comentario
#26 Yo, como Director y por tanto jefe de los informáticos tengo acceso root a los servidores y las máquinas

¿Preguntarle a quién?
#66 Como dije antes en muchas ocasiones tengo que probar algunos productos para dar el visto bueno (aplicaciones sanitarias o de gestión), y además tengo un pool de máquinas virtuales para administrar a mi gusto, en no pocas ocasiones me aparecen actualizaciones , como mucho me atrevo con un git pull, pero poco más, si la aplicación requiere de más permisos o me insta a darle otra contraseña, no lo hago.
#82 Para probar aplicaciones no es necesario root. Para administrar hacen falta conocimientos.
#26 Si tus informáticos saben más que tu de informática (entiendo que tu tienes acceso porque eres el director, jefe, propietario de la empresa pero que tienes administradores de sistemas a tus órdenes), harías bien en seguir ese consejo :-)
#15 Bravo por la explicación!
#15 Enorme explicación. Pena que sólo te pueda dar un positivo, compañero. :clap: :clap:

Salu2
Interesante hilo en Reddit (leer el segundo comment) -> www.reddit.com/r/netsec/comments/dhxln5/cve201914287_sudo_flaw_lets_li

I saw another thread and apparently it requires the user performing the sudo to have permission to run commands for all users (and not just root). So the default configuration isn’t exploitable as it is set up to just allow users in the sudo group to run commands as root.
#4 #29 #23 No funciona porque necesita una configuración concreta del fichero /etc/sudoers que casi nadie tiene.

En la noticia en inglés original lo explica, cosa que no hace la noticia en español para darle más sensacionalismo.

Edit: Veo que #9 ya lo ha comentado
#30 lo vi después en otro comentario, y realmente es una configuarción muy particular y que no creo que se de muy a menudo.
#30 Sí, yo también se lo he visto luego a #9
#17 Tendré que poner más emojis para remarcar el sarcasmo la próxima vez. :roll:
#18 Pues si.. :-D :-D :ffu: :ffu:
Ya llegó a un medio generalista, la jodimos.
No te preocupes. Sólo es explotable si tienes una entrada con esta forma:

Usuario máquina=(ALL, !root) comando

Lo cual es raro porque generalmente las entradas en sudo son para dar privilegios de root. Estas líneas no vienen por defecto.
En cualquier caso si te preocupa haz un update y arreglado.

Y si depende de ti, sudo hay que evitarlo.
#20 ¿sudo hay que evitarlo?, podrías desarrollar un poco más esa conclusión?
#21 Porque en el caso de que tu sistema se vea comprometido, muy bien puede ser a raiz de que alguien ha conseguido tu password... con lo cual, si usas sudo, de repente el tipo puede tener acceso de root.

Yo lo tengo todo deshabilitado. Está instalado porque es dependencia de algunos paquetes pero no tengo ni una regla. Para las veces que tengo que tocar la configuración del sistema, me paso a root con un "su" y listos.
#24 Yo tampoco uso sudo.

Pero todo tiene sus ventajas, inconvenientes y nivel de paranoia aplicable.
#21 Yo estoy de acuerdo. El uso que hace Ubuntu y derivados de sudo me parece incorrecto. Lo ideal es que sólo el root pueda hacer sudo (para convertirse en otros usuarios con menos privilegios) y el sudo quede sólo para casos excepcionales. Lo ideal es que el root tenga una clave diferente y si necesitas ejecutar algo con privilegios altos uses su con la clave de root y no sudo con tu propia clave.

Al haber dos claves distintas el usuario tiene muy claro cuando está haciendo algo peligroso. La clave de usuario para operaciones normales y la de root para cosas que requieren saber lo que haces.
#36 Puedes configurar sudo para que te pida la contraseña de root cada cierto tiempo. Si no hubiera sudo muchos usuarios inexpertos harían cosas como iniciar un entorno de escritorio como root, por ejemplo para poder instalar un programa, y eso es un agujero de seguridad brutal.
#43 Puedes configurar sudo para que te pida la contraseña de root cada cierto tiempo.
Que yo sepa, aa que pide es la clave del propio usuario, no de root.. Justamente la función de sudo es poder ejecutar cosas con privilegios de otro usuario sin saber su clave.

De hecho, en las distribuciones basadas en Ubuntu, el usuario root no tiene clave (o sea que no te puedes loguear como root).
#44 Existe la opción de configurarlo con la de root (con rootpw creo que es) o incluso puedes definir claves personalizadas.

De hecho, en las distribuciones basadas en Ubuntu, el usuario root no tiene clave (o sea que no te puedes loguear como root)

Te puedes loguear como root con sudo su root, o sudo -i, aunque no tenga password.

En sistemas que van dirigidos a todo tipo de usuarios como Ubuntu, veo normal que se llegue a un compromiso de este tipo entre seguridad y comodidad de uso. SI vas a usar linux en sistemas más "serios" o "profesionales" lo lógico es que sepas configurar la seguridad de tu sistema y mires bien estas cosas.
#45 Te puedes loguear como root con sudo su root,

Cuando digo "loguar" me refiero a cuando estás en un prompt de "Login:" y tecleas el usuario y su clave.

En sistemas que van dirigidos a todo tipo de usuarios como Ubuntu, veo normal que se llegue a un compromiso de este tipo entre seguridad

Es que no es para nada necesario. Mageia es una distribución muy amigable para el usuario novato (diría que incluso más que Ubuntu) y resuelve todo sin necesidad de…   » ver todo el comentario
#36 Es una idiotez que sólo root pueda hacer sudo. Ya root tiene todos los privilegios del mundo, y además, puede suplantar a cualquier usuario con su...

La gracia del sudo es que puedas darle privilegios de root (o del usuario X) a otro usuario para ejecutar cosas concretas (durante un tiempo de sesión limitado). Por ejemplo, podrías permitir a manolo crear bases de datos postgres como si fuera el usuario postgres (pero sin tener que darle las credenciales de postgres), pero no privilegios para borrarlas (que si tendrías si le dejas ser postgres).

El problema es que las distros directamente dan todos los privilegios de root a los usuarios administradores, lo cual, concuerdo contigo, es un error.
#58 (o del usuario X)

Eso me parece lo más interesante.
#70 Es que es clave en todo este asunto. Sudo debería usarse para cosas como:

Soy el jefazo y tengo en mi home datos. Quiero que pepito extraiga mensualmente datos, pero no quiero que entre en mi home y tenga posibilidad de ver o manipular nada de lo que hay ahí. Así pues, me creo un script que saca sólo los datos necesarios para ese informe o lo que sea y con sudo le doy permisos a pepito sólo para ejecutar ese script como si lo hiciera mi usuario. Así él puede extraer esos datos de mi home…   » ver todo el comentario
#58 Justamente. El sudo se creó para que un usuario pudiera ejecutar comandos con los privilegios de otro. Muchas veces el root quiere dejar de tener permiso para todo y convertirse en un usuario normal. Es muy útil.

Claro que a veces es útil que un usuario pueda, por ejemplo, hacer un backup que requiere permisos de root. En ese caso se permite al usuario sólo ejecutar ese comando como root.

Lo que es mala idea es permitir al usuario ejecutar cualquier cosa como root (como hace Ubuntu). Para eso le das la clave de root y listo.
#72 ¿root? ¿o el usuario que usa root? porque para eso existen los demás usuarios. Lo normal es no acceder al sistema como root, y sólo en caso de tener que hacer algo de administración, entrar como root momentaneamente. Eso de "root necesita convertirse en usuario normal" es simple y llanamente hacer las cosas mal en algún punto.

O simplemente, ejecutar un script de otro usuario que lista datos, mientras todo ello está en su home, donde tú ni tienes permisos ni privilegios. Así, tú…   » ver todo el comentario
#76 Eso de "root necesita convertirse en usuario normal" es simple y llanamente hacer las cosas mal en algún punto.
Ejemplo: estoy preparando un programa en php y quiero asegurarme de que va a poder leer determinado archivo. Entonces hago un su o un sudo para convertirme en usuario apache, y después intento un cat del archivo. Obviamente eso sólo se puede hacerse desde root porque el usuario apache no tiene clave para poder hacer su.

De todas formas tienes razón en que el sudo es muy versátil, pero en Ubuntu se lo usa muy mal porque permite al usuario hacer cualquier cosa y no comandos específicos.
#80 Quizá porque apache no es un usuario normal, es un usuario administrador de un servicio, lo mismo que el usuario postgres. Aún así, tampoco me gusta eso de que haya que ser root para administrar una web o una base de datos. Con sudo, puedes tener permisos para "suplantar" esos usuarios y/o ejecutar comandos como esos usuarios de manera controlada y sin tener que ser root antes, que creo que es lo más seguro y lógico.
#36 root no necesita sudo para convertirse en usuarios con menos privilegios.
#69 O lo hace con sudo o lo hace con su.
#73 Con su. Para eso no necesitas sudoers ni sudo para nada.
#21 ya han contestado, pero hay más.
El sistema de permisos y grupos debería ser suficiente para asegurar el acceso seguro para cualquier tarea. Si necesitas hacerlo más granular usando sudo, posiblemente es un error de diseño. Son muy pocos los casos donde no hay otra opción.
Y meter sudo es añadir una superficie de ataque asin de grande, no solo por la aplicación en si, sino porque la gente no la usa bien.

En distros de escritorio es casi inevitable, porque el Unix no se diseñó para eso.
#47 Siempre puedes usar el suid :troll:
#20 Simplemente hay que configurarlo bien. Lo que no se puede es usar sudo del mismo modo que su, lo que hay que hacer es configurar usuarios en sudoers para poder usar sólo comandos concretos (y evidentemente usar usuarios concretos para cosas concretas), de manera que si obtienen credenciales de alguno de tus usuarios de administración sólo puedan fastidiarte una parte y no todo el sistema.

Una regla muy recomendable es no permitir a ningún usuario al que le demos permisos acceso de escritura al /etc/sudoers... ;)
#56 "Una regla muy recomendable es no permitir a ningún usuario al que le demos permisos acceso de escritura al /etc/sudoers... ;)" que es justo para lo que viene el comando visudo.

Seguro que puedes hacer lo mismo con grupos sin añadir algo que puedes no configurar bien por error.
#57 visudo es muy útil para evitar que más de un administrador editen simultaneamente el fichero y quede su integridad en riesgo, y parsea el fichero antes de guardarlo por si hay errores (no sea que lo guardes y luego con los errores no puedas usar sudo para nada) pero no para lo que tú dices.

Yo me refiero a que permitir modificar el /etc/sudoers a cualquiera y por lo tanto añadir los privilegios que le de la gana es básicamente darle la clave de root.
¿Para qué usar sudo pudiendo usar el usuario root? :shit:
#1 ¿Para que cualquier aplicación que lances sea root?
Imagínate que lanzas una aplicación calculadora, si la lanzas como root esa aplicación puede hacer lo que quiera, si quiere hacer algo raro (por ejemplo encriptar el HD) te pedirá root y tu dirás... NI DE COÑA...
#17 Y por qué vas a lanzar la calculadora como root?

Eso no justifica la necesidad de sudo. Sin sudo: Te haces root+haces tu trabajo+sales de root....
Me parece simplemente comodidad.... si eres disciplinado.
#62 Y puedes hacer lo que tu dices, pero entonces tienes que entrar y salir de root constantemente...
¿No es más simple usar un comando para no tener que estar constantemente con otra sesión de root abierta?
Más que nada porque eso puede darte problemas que confundas el usuario y lances una aplicación desde root.
#85 Normalmente, entras realizas tu tarea de administración y sales.
#1 Sí, malditos frikis y su obsesión con los usuarios y la seguridad. En vez de copiar la sencillez y confianza de Windows :shit:
#1 Es muy común que te interese ejecutar un único comando como root y es más practico hacerlo de una vez que hacer antes un login y luego un logout, también por seguridad de que se te olvide cambiar de usuario y ejecutes cosas como root que son poco seguras o cuando quieres meter un comando como root en algún script que ejecutes como usuario normal.
#41 su - y exit
No necesitas "login" y "logout"....

Si, tienes razón.
#1 Porque, aunque todo el mundo lo use mal, sudo es muy útil y puede ser mucho más seguro que otras formas de autentificación de manera bastante fina:
-Porque puedes configurar sudo para dar privilegios a los usuarios que necesites (no necesariamente permisos de root, puede ser usado para suplantar otros usuarios, por ejemplo, el de administración de x).
-Porque una vez puesta la clave, te otorga los permisos durante algo de tiempo (pero te los quita automáticamente luego), de manera que si vas…   » ver todo el comentario
#53 SI, sudo es mucho más flexible...... para usuarios que tengan esas necesidades. Y es más seguro, pero únicamente porque asegura que ejecutas como root un único comando y que no lo haces "sin querer"
#64 Para eso se usa "su -c '....' ". Sudo tiene un perfíl diferente.
El artículo está muy mal explicado (o el que lo tradujo no entendió bien el problema). Dice esto:

bastaría con modificar el archivo sudoers para eludir dicha política de seguridad

Y eso no es ninguna vulnerabilidad. La función de sudo es justamente esa. El archivo sudoers no puede modificarse a no ser que ya tengas permiso de root.

El problema real es el siguiente: Cuando uno ejecuta comandos con sudo, no necesriamente solicita al sistema convertirse en root sino que se puede…   » ver todo el comentario
El artículo es una mierda pinchada en un palo. Voy a leer HackerNews a ver si aclara algo.

"ejecutar comandos con acceso raíz," ---- hay que joderse..
#61 Sí. Y ya viene siendo una norma en los que publica Gembeta.

Voy a tomar como norma votar negativo (errónea o sensacionalista) este tipo de artículos; aunque algunos usuarios de MNM puedan entender que con ello intento ocultar "información que deja en mal lugar a los OS del tipo Linux
#3 Me largo otra temporada. Ya nos veremos ;)
#5 prueba ansible.
Yo sudo, uso Windows :-P
Ya han puesto la nueva version de sudo en el repositorio de Manjaro.
Pero... Si para modificar sudoers necesitas ser root (o hacer sudo)... No entiendo cual es la vulnerabilidad.
#2 Prueba

sudo u#-1 I'd -u
sudo -u#4294967295 id -u

Magia!

En la primera línea falta un - antes de la u, que sino el editor de menéame lo interpreta como un tachado
#4 Menéame no tacha espacios. - ejemplo-
#4 lo he probado en una debian 6.0. (por ver el alcance en el tiempo de la vulnerabilidad) y no funciona.

$ sudo -u#4294967295 id -u
[sudo] password for test:
test is not in the sudoers file. This incident will be reported.

$ cat /etc/debian_version
6.0.10

si añado el usuario test a sudoers para ejecutar alguna orden, por ejemplo

test ALL=(root) NOPASSWD: /usr/sbin/service

tampoco funciona

$ sudo -u#4294967295 id -u
[sudo] password for test:
Sorry, user test is not allowed to execute '/usr/bin/id -u' as #4294967295 on xxxxxx.
#4 No me va, se debe haber actualizado ya
#4 Mira, la magia de no usar ubuntu y derivados con su incorrecto uso de sudo:  media
#2 Se supone que sudoers lo modifcó el administrador y que lo hizo correctamente. El fallo permite ejecutar comandos no previstos como root en determinadas configuraciones de sudoers (que permiten impersonarse como cualquier usuario salvo root)
#65 si, lo explicaron un poco más arriba y lo entendí. No lo pillé a la primera y por eso me extrañaba.
Suena demasiado a puerta trasera metida por un desarroyador, no se

Umm ¿hay la lista de nombres de los desarrolladores de.las versiones de sudo afectadas?
#14 tienes razón, parece mantener en el.mismo usuario que escribe la orden... Umm
#13 Un desarroyador, ¿es uno que se dedica a desecar arroyos?
Vale, ya me cayo :ffu:
#46 jiji perdón
Esto no puede pasar, porque al ser código libre hay miles de ojos expertos mirando y por tanto cualquier vulnerabilidad habría sido corregida al instante y blablablabla
#22 Por eso es que el problema ha sido descubierto y ya está solucionado. Si se tratara de un sistema cerrado el error permanecería ahí tal vez para siempre.
#35 o hasta el 0day correspondiente
Como saber la versión de sudo que tengo?
(Si, ya lo he buscado y todas las respuestas son sobre ¿Como saber la versión de linux que tengo?)

Como actualizar sudo a la última versión?
Como la anterior

Uno se acostumbra a la gran laguna de linux, quien da la información SIEMPRE sobre entiende que todo el que la la lee la la entiende y sabe buscar soluciones.
#10 abre el gestor de paquetes/software y busca sudo para saber la versión y si hay actualizaciones:  media
#10 sudo -V

Simplemente con un man sudo tenías la información.
#10 Hay verias formas. Por ejemplo ejecutas sudo --version
O puedes mirar en tu gestor de software qué versión del paquete tienes instalada.
#10 sudo --version

Normalmente GNU (¿posiblemente para ser posix compliant?) tiene estandarizados ciertos parámetros que funcionan para todos los comandos, como por ejemplo:
--help
--version
#54 Gracias por la info, ya soy abuelo y a ciertas cosas no llego y las búsquedas en la web no son tan claras, entiendo que puede ser algo muy básico, pero una búsqueda simple en la web no daba respuestas adecuadas, tampoco tengo tiempo para meterme en el blog de Linux Mint y molestar por esta chorrada en su chat me daba corte.
Gracias, buena explicación.
llevo win así que me la suda.
#8 para una vez que no te afecta... :troll:
comentarios cerrados

menéame