Una vulnerabilidad en systemd-coredump permite determinar el contenido de la memoria
Se dio a conocer la noticia de que se identificó una vulnerabilidad (ya catalogada bajo CVE-2022-4415) en systemd-coredump, que maneja los archivos principales generados después de fallas en el proceso y que podría permitir que un usuario local sin privilegios inspeccione el contenido de la memoria de los procesos privilegiados que se ejecutan con el indicador root suid.
systemd-coredump es un controlador de volcado de núcleo de espacio de usuario para Linux que forma parte de la suite systemd. La vulnerabilidad se debe a la falta de un manejo correcto del parámetro sysctl fs.suid_dumpable en systemd-coredump que, con el valor predeterminado de 2, permite la generación de volcados de núcleo para procesos con la marca suid.
Se entiende que los archivos centrales de los procesos suid escritos por el kernel deben recibir derechos de acceso que permitan la lectura solo por parte del usuario root. La utilidad systemd-coredump, a la que llama el kernel para guardar archivos principales, guarda el archivo principal como root, pero además otorga acceso basado en ACL a los archivos principales que se pueden leer según la ID del propietario que inició originalmente el proceso.
Esta función le permite cargar archivos centrales sin tener en cuenta el hecho de que el programa puede cambiar la ID de usuario y ejecutarse con privilegios elevados. El ataque se reduce al hecho de que el usuario puede iniciar una aplicación suid y enviarle una señal SIGSEGV, luego de lo cual carga el contenido del archivo central, que incluye una porción de la memoria del proceso en el momento del bloqueo.
En el correo donde se informa sobre el problema se comenta lo siguiente:
La cuestión
=========systemd-coredump establece sysctl fs.suid_dumpable de forma predeterminada en 2 mediante
un archivo de configuración de inserción sysctl.d. Para el volcado de núcleo integrado del núcleo
el manejo de esta configuración significa que los volcados del núcleo para setuid (o de otro modo
privilegiados) los procesos se escribirán en el disco, pero solo se
accesible para el usuario raíz para evitar la fuga de datos confidenciales a
cuentas de usuario sin privilegios. Ver también `man 5 proc` para el completo
documentación de este sysctl.systemd-coredump en el espacio de usuario, sin embargo, no respeta este kernel
configuración en la implementación de su manejo de volcado de núcleo. El ID de usuario real
de un proceso de volcado recibirá acceso de lectura al volcado del núcleo a través de un
Entrada de LCAPor ejemplo, el usuario puede ejecutar «/usr/bin/su» y finalizar su ejecución en otro terminal con el comando «kill -s SIGSEGV `pidof su`», después de lo cual systemd-coredump guardará el archivo principal en /var /lib/systemd/ directorio coredump configurando una ACL para él que permite que el usuario actual lo lea.
Se menciona que debido a que la utilidad suid ‘su’ lee el contenido de /etc/shadow en la memoria, un atacante puede acceder a información sobre los hash de contraseñas de todos los usuarios del sistema. La utilidad sudo no es susceptible de ataques, ya que prohíbe la generación de archivos core a través de ulimit.
En cuanto al problema, se ha confirmado en la configuración por defecto en las distribuciones openSUSE, Arch, Debian, Fedora y SLES. Según los desarrolladores de systemd, la vulnerabilidad se manifiesta a partir de la versión 247 de systemd (lanzada en noviembre de 2020), pero según el investigador que identificó el problema, también se ve afectada la versión 246.
La vulnerabilidad se manifiesta si systemd se compila con la biblioteca libacl (por defecto en todas las distribuciones populares). La solución todavía está disponible como parche.
Para los interesados en realizar un seguimiento de la corrección en las distribuciones, pueden hacerlo desde las siguientes páginas: Debian, Ubuntu, Gentoo, RHEL, SUSE, Fedora, Gentoo, Arch.
Finalmente cabe mencionar que de momento como solución de seguridad temporal, los usuarios pueden establecer sysctl fs.suid_dumpable en 0, lo que deshabilita la transferencia de volcados al controlador systemd-coredump.
Si quieres conocer más al respecto, puedes consultar los detalles en el siguiente enlace.