¿Cómo deshabilito o elimino la cuenta raíz creada como efecto secundario de este error de seguridad de High Sierra?

Este artículo describe un error en el que ingresar a la raíz cuando se le solicita un desbloqueo permite que cualquier usuario desbloquee las preferencias del sistema. Advierte que:

No es necesario que lo haga usted mismo para verificarlo. Al hacerlo, se crea una cuenta "raíz" que otros pueden aprovechar si no la desactiva.

El artículo no describe qué hacer si un ingeniero demasiado ansioso reprodujo el problema y ahora necesita eliminar o deshabilitar la cuenta raíz.

¿Cómo se puede deshabilitar o eliminar esta cuenta de forma segura?

Esta página de Apple describe cómo deshabilitar la cuenta, pero esto no protege contra la falla porque la falla puede volver a habilitar la cuenta. Funcionará para restaurar el sistema a su estado normal con la raíz deshabilitada una vez que se solucione el error de seguridad.

Actualización 2017-11-29 16:43 UTC

Consulte Acerca del contenido de seguridad de la Actualización de seguridad 2017-001 para actualizar macOS High Sierra y evitar que se omita la autenticación del administrador sin proporcionar la contraseña del administrador.

El título de esta pregunta es un XY como se indica actualmente, ya que no se desea eliminar o deshabilitar la cuenta.

Respuestas (6)

Parche disponible, haga clic aquí, o simplemente actualice en la máquina

Curiosamente, hasta donde yo sé, todavía no hay un parche para las versiones beta y de desarrollador de OSX. Actualizaré esta respuesta tan pronto como me entere de ellos.

Descarga el parche de arriba. Dejando el resto del post para la historia :-)

El CVE es CVE-2017-13872 y NIST actualizará el análisis en un futuro próximo.

Respuesta original, relevante sin parche.

En primer lugar, no deshabilite la cuenta raíz a través de la GUI, tener una cuenta raíz "deshabilitada" es la causa del problema.

Deberá habilitar el usuario root y darle una contraseña. Esto es importante , ya que la vulnerabilidad también está disponible de forma remota, a través de VNC y Apple Remote Desktop (por nombrar algunos) (otra fuente) .

Hay dos formas básicas de hacer esto; Interfaz gráfica de usuario y terminal.

En primer lugar, GUI

Para habilitar la cuenta raíz, vaya a "Utilidad de directorio", es decir, cmd + espacio y busque. Presione el candado para desbloquear el "modo administrador", luego habilite la cuenta raíz a través de editar -> "Habilitar usuario raíz".

Cómo habilitar la raíz

Debería pedirte una contraseña de root, por ahora ingresa tu contraseña normal (para que no la olvides). Si no solicita una contraseña, use Editar -> "Cambiar contraseña raíz..." arriba.

Terminal

Si eres más una persona terminal, usa lo siguiente:

sudo passwd -u root
## Enter passwords as needed.... 
## (if you are using the terminal you should know what you are doing...)

Esto es suficiente con una terminal, el problema con la interfaz gráfica de usuario es que tenemos que habilitar la cuenta para establecer una contraseña, que no tenemos que hacer con la terminal.

notas

Incluso si tiene una contraseña configurada para la cuenta raíz, su computadora se volverá vulnerable si deshabilita la cuenta raíz. La acción de deshabilitar la cuenta raíz parece ser la culpable. Así que repito, el usuario root debe estar habilitado y tener una contraseña si usa la GUI, mientras que a través de la terminal solo usar 'contraseña' está "bien" (aunque este estado es inalcanzable solo a través de la GUI). Parece que "Deshabilitar usuario raíz" en "Utilidad de directorio" elimina la contraseña de la cuenta raíz, en cierto sentido, le brinda una cuenta raíz sin contraseña que es vulnerable.

Parece que intentar iniciar sesión con "raíz" en una ventana de inicio de sesión del sistema habilita la cuenta raíz si estaba deshabilitada previamente. Es decir, con una cuenta raíz deshabilitada, debe ingresar a la raíz dos veces en una ventana de inicio de sesión del sistema para obtener acceso de raíz y (según mis pruebas) en el primer intento, la cuenta raíz está habilitada (sin contraseña si no se establece a través passwdde), y en el segundo intento pasas.

Parece que el problema ha estado a la vista desde al menos el 13-11-2017 (13 de noviembre), cuando se menciona en el foro de soporte de Apple .

Por favor, demuéstrenme que estoy equivocado, realmente apreciaría estar equivocado en este momento.

Actualización aterradora

Después de habilitar la cuenta raíz sin contraseña (es decir, a través del panel de preferencias del sistema y haciendo clic en un "candado" e ingresando "raíz" con la contraseña en blanco una, dos o tres veces (la cantidad de veces depende del estado inicial)), es posible iniciar sesión en la computadora desde la pantalla de inicio de sesión principal usando "root" y una contraseña en blanco (!). SSH / Telnet no parece funcionar, pero Apple Remote Desktop, Screen Sharing y VNC son vulnerables.

Entonces, para los administradores de redes, podría ser de interés dejar paquetes temporalmente en los siguientes puertos:

  • 5900-5905 (más o menos, para ser ninja seguro) para obtener los puertos VNC más comunes. VNC comienza en 5900 de forma predeterminada y enumera hacia arriba si está utilizando varias pantallas (aunque es poco común). Screen Sharing y Apple Remote Desktop también parecen usar estos puertos ( lista de puertos de software de Apple )
  • 3283 y 5988 para Apple Remote Desktop ( lista de puertos de software de Apple )

Lectura adicional:

Un valiente intento de referenciar otras fuentes que tratan el tema. Edite y actualice mi respuesta si tiene más.

Ok, veo por qué la auto-respuesta es incorrecta. Deshabilitar la raíz no sirve hasta que se solucione esta falla, ya que la falla en sí misma solo volverá a habilitar la cuenta. ¡Ten algunos votos positivos para que puedas comentar!
No soy un tipo de Mac, pero en el mundo * nix, deshabilitar la contraseña de root no debería ser menos seguro que tener una contraseña segura. De hecho, es muy común deshabilitar la contraseña y configurar el shell /dev/nullpara root. De esta forma, el acceso a la cuenta raíz se produce a través sude llamadas al sistema para usuarios con ese permiso.
@crasic AFAIK OSX hace algo extraño con sus ventanas de inicio de sesión del sistema. Aparentemente habilitan cuentas en general o rootean en específico si lo intentan. Y prácticamente no hay documentación disponible de este comportamiento. Tenga en cuenta que los detalles de BSD (es decir, el uso de la línea de comandos/bash) no son problemáticos.
Entonces, con el comando Terminal, ¿puede establecer la contraseña de root sin habilitar la raíz? Esa parece la opción más segura.
@wisbucky Absolutamente, lo es en gran medida, pero habilitar la raíz y la contraseña de configuración es mucho mejor que deshabilitar la raíz y sin contraseña. Pero en mi experiencia, la terminal puede dar miedo a veces.
La gente tuitea (por ejemplo , 1 , 2 ) que la vulnerabilidad se puede explotar de forma remota a través de VNC.
@DarkDust actualizó la respuesta en consecuencia. No puedo obtener el inicio de sesión raíz local desde cero (es decir, después del arranque en frío), solo cuando un usuario inicia sesión primero. ¿Alguien puede verificar esto?
"Incluso si tiene una contraseña, su computadora es vulnerable si deshabilita la cuenta raíz después de configurar la contraseña. Así que repito, el usuario raíz debe estar habilitado y tener una contraseña (técnicamente, solo la contraseña es "ok", pero no hay forma de llegar a este estado solo con la GUI)" Parece que hay una contradicción aquí.
@jcm Nah, en realidad no lo es, solo está muy mal redactado después de mover un poco el texto. Trataré de aclararlo un poco, ¿he mirado en un minuto?

Si no puede instalar el parche oficial o no quiere confiar en que funcionó, entonces

No desea deshabilitar el usuario root solo en High Sierra.

Para asegurar su Mac, habilite la raíz con una contraseña segura larga.

No cambiaremos esto en el trabajo hasta que salga la próxima versión completa para macOS, que probablemente sea 10.13.2


A menos que tome medidas, el usuario raíz está deshabilitado de inmediato y esto es malo si su Mac no está parcheada correctamente.

Si lo desea, opcionalmente endurezca el caparazón hasta que Apple tenga un parche o arreglo oficial.

Aquí hay un excelente script para establecer una contraseña raíz aleatoria y cambiar/establecer el shell raíz para /usr/bin/falseque, incluso si se adivina la contraseña, el shell raíz no pueda iniciar sesión:

Básicamente hace tres cosas clave:

rootpassword=$(openssl rand -base64 32)
/usr/bin/dscl . -passwd /Users/root "$rootpassword"
/usr/bin/dscl . -create /Users/root UserShell /usr/bin/false

La creación de UserShell es si el shell no está configurado, y el script completo busca un shell existente y -changelo es en lugar de -createenviarlo.

¿Cómo me protejo de la vulnerabilidad raíz en macOS High Sierra?

Por lo general, es preferible no almacenar una contraseña, ni siquiera temporalmente, de esta manera. La página de manual de dcsl sugiere "no proporcione la contraseña como parte del comando y se le solicitará de forma segura"
De acuerdo @JoshCaswell: tenerlo en un script es mejor ya que la variable no se exporta y se genera. La buena noticia es que Apple tiene un parche oficial que hace que este truco sea una necesidad de corta duración: lo ejecutamos como profiláctico para el daño mucho mayor de codificar la misma contraseña en toda la flota o no tener ninguna contraseña. Seguramente fue un compromiso y no una solución.
Por pura curiosidad, ¿por qué tiene un enlace a esta pregunta al final de su respuesta?
@reirab totalmente en mal estado. Ver editar para corregir el enlace adecuado. ¡Gracias!

Ejecute una actualización de software desde la App Store. Apple lanzó una actualización de seguridad esta mañana.

Debe iniciar sesión como usuario raíz y cambiar la contraseña a algo más seguro. Si realmente crea una nueva cuenta (en lugar de habilitar la cuenta raíz ya existente), primero debe eliminar esa cuenta.

Ver mi auto-respuesta. Su consejo de establecer una contraseña segura es razonable, pero deshabilitar por completo la cuenta parece una protección aún más rigurosa y restaura OS X a su estado predeterminado. support.apple.com/en-us/HT204012 . ¿Establecer una contraseña fuerte protegería contra la explotación del error descrito incluso si la cuenta raíz se vuelve a habilitar?
En High Sierra, 10.13.0 y 10,13.1, absolutamente no desea deshabilitar la cuenta raíz. El problema es que si la raíz está deshabilitada e intenta usar cualquier ventana de inicio de sesión para iniciar sesión como raíz, la ventana de inicio de sesión habilitará la cuenta raíz con una contraseña en blanco. Si la raíz ya está habilitada con una contraseña segura, la ventana de inicio de sesión no borra la contraseña. La única mitigación es habilitar la raíz con una contraseña segura .

Apple acaba de lanzar una actualización para solucionar el problema.

Actualización de seguridad 2017-001 https://support.apple.com/en-us/HT208315

Además, para evitar el acceso no autorizado a sus computadoras Mac, debe habilitar la cuenta de usuario raíz y establecer una contraseña específica para el usuario raíz.

https://support.apple.com/en-ph/HT204012

Si su cuenta de usuario raíz ya está activa, asegúrese de cambiar la contraseña solo para asegurarse de que la vulnerabilidad de la contraseña en blanco no esté configurada.

¡No! ¡No elimine la cuenta raíz!

En primer lugar, rootha estado presente en todas las versiones de macOS, Mac OS X, Mac OS e incluso versiones antiguas del sistema operativo. macOS no creó recientemente esta cuenta debido a una vulnerabilidad. Simplemente lo expuso por accidente.

Eliminar rootsería una muy mala idea, y déjame decirte por qué.

Paralizaría completamente macOS, ya que no habría una cuenta con suficientes privilegios para ejecutar servicios críticos (como WindowServer, que ejecuta la GUI). Existen medidas de seguridad para evitar que los usuarios despistados eliminen root, y no debe intentar eludirlas.

Averigüemos quién ejecuta los primeros procesos en el sistema, los procesos más importantes (usando el Monitor de actividad):

kernel_task y launchd también son propiedad de

¡Oye, es nuestro vecindario amistoso roototra vez! El primer proceso (con PID 0) en realidad está controlado por el kernel, y probablemente tendrá todos los permisos de todos modos, pero su proceso secundario launchd(responsable de iniciar servicios como la ventana de inicio de sesión y el propio servidor de ventanas) se inicia con los privilegios de root. Si rootno existiera, este proceso nunca se habría iniciado o no tendría permisos.

Asegurar la cuenta raíz

Otras respuestas han proporcionado un parche lanzado por Apple que debería solucionar el problema. Sin embargo, si no puede o no quiere instalarlo...

Funciona porque macOS vuelve a aplicar el hash a la contraseña ingresada como una "actualización" porque se detectó incorrectamente que la cuenta deshabilitada (raíz) tenía un hash antiguo. Todavía dirá que es incorrecto, pero la próxima vez, los hash coincidirán (porque macOS lo cambió) y te permitirá ingresar.

Para proteger root, tendrá que usar la Utilidad de Directorio. Hay dos formas de acceder a él:

  1. Utilice Foco.Inicio de la Utilidad de directorios mediante Spotlight
  2. Usa el Buscador. Abra el Finder, presione Comando+Mayús+G (o seleccione , ingrese /System/Library/CoreServices/Applications/y presione Ir (o presione Intro). Luego, abra la Utilidad de Directorio desde allí.Seleccionando Ir Seleccionando a dónde ir Apertura de la utilidad de directorio

Una vez que haya abierto la Utilidad de directorios, tendrá quehaga clic en el candado para hacer cambios

Una vez hecho esto, seleccione Change Root Passwordo Enable Root Useren el menú Editar. Lo muestro Change Root Passwordya que mi cuenta raíz ya está habilitada con una contraseña segura.

Seleccionando Cambiar Contraseña Raíz

Elija una contraseña, y ahora la contraseña en blanco ya no funcionará.

Elegir una contraseña

¡Felicidades! Ya no eres vulnerable al hackeo de raíz.

"Adivinando por pura especulación, el sistema probablemente vuelve a habilitar la cuenta raíz porque ingresó la contraseña correcta (en blanco en este caso). "- no del todo bien. Hay una ruta de migración para actualizar las contraseñas usando un mecanismo hash antiguo, y no maneja !(lo cual, como tipo UNIX, probablemente reconocerá) correctamente.
Consulteobject-see.com/blog/blog_0x24.html para obtener un análisis de causa raíz.
Correcto, entonces mi especulación no fue precisa. Entonces, ¿vuelve a generar una contraseña en blanco como una "actualización" porque se detectó incorrectamente que la cuenta deshabilitada tenía un hash antiguo? ¿Estoy en lo correcto?
En teoría, lo que se supone que debe hacer en esta ruta de código es verificar que el antiguo algoritmo hash valide la contraseña ingresada y luego actualizar con un nuevo hash (de la contraseña ingresada, que se sabe que coincide con la anterior). En la práctica, no verifica los errores de la función que se supone que debe recuperar el hash antiguo del campo "ShadowHash" (o, más bien, solo verifica el valor de retorno, pero no el valor pasado por referencia utilizado para devolver el resultado de la comparación), y luego genera un nuevo hash a partir de la contraseña (¡vacío o no!).
...así que, más o menos, sí, tienes razón. :)