164 meneos
2844 clics
Heap overflow en sudo permite conseguir privilegios de root localmente [ENG]
Un fallo que lleva 10 años escondido a simple vista permite ejecutar código como otro usuario usando sudo. En la mayoría de configuraciones por defecto esto implica poder escalar privilegios a root
|
comentarios cerrados
Una pesadilla si administras máquinas en las que tienes usuarios en los que no confías. Un fallo tonto si tú eres el único usuario de tu máquina.
Edit: Bueno, creo que sí lo pillo: Que siguen saliendo vulnerabilidades "de las de toda la vida" sin ser por culpa de tecnologías "nuevas" (como unicode).
github.com/slicer69/doas
Una pesadilla si administras máquinas en las que tienes usuarios en los que no confías. Un fallo tonto si tú eres el único usuario de tu máquina.
Si escribes "sudo <orden>", se te solicitará la contraseña del súper usuario (llamado "root"), lo que viene siendo un usuario con privilegios de administrador. Si introduces correctamente la contraseña se inicia una sesión efímera como root, que se cierra tan pronto como la orden termina de ejecutarse. Este usuario puede hacer literalmente cualquier cosa que quiera, como si quiere ejecutar la orden "bórrame todos y cada uno de los archivos que haya en el disco duro, sistema operativo incluido". Él coge y lo hace, cualquier otro usuario recibiría un error
Según esta vulnerabilidad podría usarse el comando sudo de manera "maléfica" para impersonar a otro usuario
* Cuando se habla de "rootear" un Android es precisamente esto, permitir que se inicie la sesión del sistema operativo como usuario "root" (administrador) de manera que se tiene acceso a todo el potencial del sistema
* SECURITY UPDATE: dir existence issue via sudoedit race
- debian/patches/CVE-2021-23239.patch: fix potential directory existing
info leak in sudoedit in src/sudo_edit.c.
- CVE-2021-23239
* SECURITY UPDATE: heap-based buffer overflow
- debian/patches/CVE-2021-3156-pre1.patch: check lock record size in
plugins/sudoers/timestamp.c.
- debian/patches/CVE-2021-3156-pre2.patch: sanity check size when
converting the first record to TS_LOCKEXCL in
plugins/sudoers/timestamp.c.
- debian/patches/CVE-2021-3156-1.patch: reset valid_flags to
MODE_NONINTERACTIVE for sudoedit in src/parse_args.c.
- debian/patches/CVE-2021-3156-2.patch: add sudoedit flag checks in
plugin in plugins/sudoers/policy.c.
- debian/patches/CVE-2021-3156-3.patch: fix potential buffer overflow
when unescaping backslashes in plugins/sudoers/sudoers.c.
- debian/patches/CVE-2021-3156-4.patch: fix the memset offset when
converting a v1 timestamp to TS_LOCKEXCL in
plugins/sudoers/timestamp.c.
- debian/patches/CVE-2021-3156-5.patch: don't assume that argv is
allocated as a single flat buffer in src/parse_args.c.
- CVE-2021-3156
* debian/control: added tzdata to Build-Depends so that the time zone
data directory is present during builds.
sudo permite ejecutar comandos como otro usuario, pero este "otro usuario" no tiene que ser root, eso se define en el /etc/sudoers
La clave que te pide, por defecto, es la del usuario que llama a sudo. su es un comando que permite ejecutar una sesión como otro usuario (tampoco es solo como root, que también hay esa confusión habitual, es como cualquier otro usuario) y su si te pide la clave del usuario como el que quieres ejecutar la shell. Esto es así por diseño y poco defecto pero es configurable también en el sudoers y puede pedir una u otra clave.
La idea del sudo no es tanto que puedas hacer X sino que quede registrado y tengas que autenticarte, obviamente el mismo efecto de ejecución se podría conseguir poniendo todos los ejecutables +s y nadie con dos dedos de frente lo hace, ese paso de que tengas que poner la clave impide, por ejemplo, que programas automatizados ejecuten comandos con privilegios de otro usuario sin tu intervención, o que si alguien encuentra una vulnerabilidad y entra al sistema con tus permisos (pero sin conocer tu pass) no pueda escalar privilegios.
La clave de root está deshabilitada por defecto en Ubuntu y algunos sistemas más, es una moda horrible que empezó Ubuntu para que los usuarios no-tan-técnicos , que eran los destinatarios principales de la distribución originalmente no utilizaran el usuario root todo el tiempo y tuvieran que autenticarse para ejecutar comandos como root si o si, una especie de UAC para Linux, de ahí lo extendido de esta configuración por defecto: "root deshabilitado+un grupo de administracion en el sudoers para ejecutar cosas como root"
Añado: q4os, un derivado de debian, también, a ver la raspi...
imgs.xkcd.com/comics/sandwich.png
sudo "hazme un sandwich"
a ver si puedes hacer eso doas
Ni casi nadie que use Debian. No es necesario para nada.
Los Ubunteros son otra cosa...
su - & work & exit
Me dirás que tú no usas sudo para administrar tu máquina?
En esos entornos es donde sudo es peor idea.
su -
work
exit
El sistema lo gestiona el administrador. En Linux es root.
Que el usuario X pueda parar y reiniciar servicios es una idea pésima. Y que necesite ser root para arrancar y parar aplicaciones es una idea aún peor.
geekland.eu/configurar-sudo-en-linux/
En cualquier entorno mínimamente complejo tienes sudo a patadas, y no solo para ejecutar tareas como root, sino también para tareas que se hacen con un usuario diferente al que te logeas.
Has dicho UNIX en lugar de Linux ... tú vas a ser de una edad ya respetable.
P.S. Yo empecé a currar con UNIX y XENIX (y luego con SunOS, Solaris y HP-UX) antes de que hubiera Linux.
Sudo es peligroso, hay que evitar utilizarlo siempre que sea posible, y si es imprescindible hay que configurarlo con mucho cuidado. Es una superficie vulnerable justo donde es más peligroso.
La diferencia es que la anterior vulnerabilidad era jodida de explotar ya que había que tener el sudo configurado de una forma muy peregrina que no tenía nadie, pero esto es un desbordamiento de buffer de toda la vida.
Yo vivo bastante bien sin sudo en la mayoría de mis sistemas. Un uso cuidadoso de los usuarios, permisos y grupos es suficiente el 95% de los casos. Incluso el sticky bit es menos peligroso.
Servicios como cuales?
que muchos servicios se arranquen como root
Claro. Pero esos servicios solo los debe administrar el administrador.
En cualquier entorno mínimamente complejo tienes sudo a patadas
Pues en mi sistema no está. Y administro una red de más 300 equipos con todo tipo de servicios, muchos de ellos virtualizados.
no solo para ejecutar tareas como root
Para realizar tareas de administración lo mejor es SER el administrador
tareas que se hacen con un usuario diferente al que te logeas.
Si quieres hacer tareas con un usuario diferente solo se justifica si eres administrador. Y si eres administrador puedes convertirte en el usuario que desees.
sudo tiene su utilidad. Pero es mucho más específica y mucho menos general de lo que la gente piensa.
Cuando yo administro mi máquina soy Dios. No un sucedáneo.
Pero una vez dentro con un usuario sin privilegios puedes adquirirlos cuando los necesites.
+10
Eres de esos que tiene el administrador deshabilitado ???
En la Raspberry, lo mismo. Root no exist a menos que lo habilites. Es decir, la tendencia de las distros es que se use sudo.
Eso es un síntoma de administración negligente.
El uso de sudo debería ser muy puntual y específico, no "para administrar". Para administrar está el administrador.
El administrador SOLO debe administrar. Un usuario NUNCA debe administrar. Ni sudo ni leches.
No todo es Ubuntu en la vida.
Y si, es Ubuntu. Que le vamos a hacer.
Y raspberry.
Y algunos otros.
Sobre todo, sistemas domésticos. Y NO. La tendencia no es "a que se use sudo".
Pero generalmente, sudo es completamente innecesario e incluso inconveniente (sobre todo si le das a un usuario TODOS los privilegios que es lo más habitualmente se hace)
En realidad sudo es muy modular y muy fino y bien configurado muy seguro.
Otra cosa es que por defecto en muchas distros venga configurado para suplantar a root, pero eso es una fuente de problemas de seguridad y por eso muchos desaconsejan su uso.
En sistemas medianamente grandes, tienes un montón de gente administrando aplicativos, y hay que gestionar infinidad de excepciones, para que no todo el mundo sea administrador, y para tener un seguimiento de las tareas que se hacen como tal.
sudo es una herramienta con multitud de aplicaciones, y mucho menos específica de lo que crees. Si el aplicativo "tal" necesita acceder a cierto comando como root, se le genera una regla en el sudoers para dicho aplicativo, que el usuario X tiene que realizar tareas con el usuario de aplicativo Y, se genera regla, que la utilidad de monitorización que funciona con su usuario tiene que mirar un comando con un usuario determinado, se genera regla, ..., y así hasta la nausea.
Las aplicaciones NO se deben ejecutar con permisos de administración ni deben necesitarlos para funcionar. Y mucho menos en "sistemas medianamente grandes"
Dime ejemplos de esos "aplicativos" que necesitan "root" para ser administrados.
sudo es una herramienta con multitud de aplicaciones, y mucho menos específica de lo que crees
sudo es una herramienta que se le puede dar un "uso general" pero que cualquier persona con dos dedos de frente solo la utilizaría para propósitos muy específicos, sobre todo en sistemas "medianamente grandes".
Si el aplicativo "tal" necesita acceder a cierto comando como root
Pues entonces o es una mierda de aplicativo, o es un aplicativo que SOLO debería gestionar el administrador.
Dame un ejemplo.
No se que máquinas gestionas, pero en cuanto tienes equipos de más de una persona, y necesitas un mínimo de control, sudo es la solución.
Yo lo usaba hasta el OpenSolaris por ser más configurable que pfexec, no te digo más.
Tarea del administrador. Un usuario jamás tendría por qué rearrancar el apache.
o cualquier aplicación que escuche en un puerto privilegiado
Ninguna aplicación de usuario debería escuchar en un puerto privilegiado. Por eso se llaman "puertos privilegiados"
¿gestionar las páginas estáticas de un servidor web, por ejemplo, lo tiene que hacer un administrador?
Para eso no se necesita sudo para nada. Están los permisos y las ACL
si en la máquina quieres saber quien se conecta,
Eso solo le interesa al administrador
cada usuario que gestione cualquier cosa tiene su usuario
A qué le llamas "Cualquier cosa" ?
sudo para realizar tareas con el usuario del aplicativo
No he negado la utilidad de sudo para tareas muy específicas y concretas. Si como herramienta para administrar.
No se que máquinas gestionas, pero en cuanto tienes equipos de más de una persona, y necesitas un mínimo de control, sudo es la solución.
Es justo en esos entornos en los que sudo es un PROBLEMA en lugar de una solución. Muchas veces es una ñapa para mantener equipos administrados de modo negligente.
Que el programador de una web necesite sudo para modificar o actualizar código de su web es un ejemplo claro. Eso es una barbaridad.
Pero si miramos más allá del escritorio, sudo es la forma estándar de administrar un sistema remoto en algunos servicios en la nube. Por ejemplo, cuando creas una máquina virtual con Debian en Google Cloud, tienes que poner un usuario normal al que accedes mediante ssh con clave pública, y ese usuario puede convertirse en root usando sudo sin contraseña.
Cuando tienes cientos o miles de máquinas, esa es la forma en la que luego herramientas como ansible te permiten ser root en todas esas máquinas sin volverte loco.
Si tienes multitud de máquinas, y tienes a varios equipos (BBDD, aplicaciones web, middleware, ...) trabajando, no todo lo hace el administrador, y no todos los que tienen que trabajar en las máquinas tienen que ser administradores de todo.
P.D.: Los programadores no huelen las máquinas.
(Siempre hablando en entornos de escritorio, no empresarial, claro)
Si por la razón que sea alguien logra entrar como www-data (normalmente no se puede), es una cagada gorda, y si combinas eso con el fallo de sudo, entonces la cagada es completa.
Cuando decía "fallo tonto" estaba hablando sobre todo de un sistema de escritorio típico, donde el único usuario eres tú y no ofreces servicios al exterior (no tienes puertos abiertos en el router, etc).
Y cuidado con él.
acceder al sistema como root y trabajar normalmente como ese usuario está totalmente desaconsejado,
Por supuesto. Es una locura. Nadie en su sano juicio hace eso:
su - & administrar & exit
Un ejemplo: Tienes al usuario juan con el que te conectas alegremente por ssh (porque como root no puedes) y luego una vez conectado usas sudo para hacer tareas de administración.....
Que ocurre si la contraseña de juan se ve comprometida ?????
Ocurre que pierdes el control de tu máquina, porque de facto, juan ES root.
No es una "cuestión de costumbres", hay constumbres más seguras, menos seguras y temerarias.
EXACTO. Y eso es un problema. Que pasa si alguien tiene conocimiento de la pass de ese usuario ?????
Encima puede conectarse remotamente....
sudo no necesita exit.... a no ser que uses sudo para hacer sudo bash, lo cual ya es el colmo de los despropósitos.