A principios del presente mes mientras revisaba algunos feed de notificaciones de nuevas vulnerabilidades me encontré con la siguiente publicación en Reddit, en donde se compartía el repositorio de GitHub de un investigador de origen chino (aparentemente) llamado xkaneiki:
Este repositorio de GitHub contiene lo que es un exploit que automatiza la explotación de la vulnerabilidad referenciada con el identificador: CVE-2023-0386. Que según fuentes especializadas se trata de una vulnerabilidad revelada el pasado 22 de Marzo, con criticidad alta, que supone un error del kernel de Linux en el sistema de archivos OverlayFS que puede conducir a un usuario local del sistema efectuar la escalada de privilegios hasta root. Así mismo y por lo que se ha podido contrastar (lo veremos a continuación), esta vulnerabilidad a través de sus automatismos públicos tiene una puesta en marcha bastante asequible, sumado a que puede afectar a un conjunto de distribuciones de Linux altamente populares, bastante notorias y extendidas, es que hoy os vengo a traer mis indagaciones y pruebas de laboratorio.
Para los que no estén muy familiarizados con OverlayFS, voy a dejar algunas descripciones revisadas que están bastante bien explicadas y me permito citar textualmente (dejo las referencias al final del post):
OverlayFS le permite tener un sistema de archivos que se compone de dos capas; una capa superior y una capa inferior. Cualquier cambio en los archivos que existen en la capa inferior efectivamente hace que ese archivo se «copie» en la capa superior, lo que reflejará los cambios del archivo en el sistema de archivos superpuesto sin cambiar la versión del archivo de las capas inferiores. Esto parece bastante sencillo hasta que considera que los directorios superior e inferior pueden estar montados en diferentes espacios de nombres de usuario.
Al crear un directorio más bajo en un espacio de nombres de usuario, un atacante puede usar efectivamente sus privilegios de root falsos para crear un binario setuid propiedad de root. Al activar posteriormente una copia de ese archivo en el directorio superior (que puede ser un directorio de escritura mundial, como /tmp), pueden copiar su binario setuid diseñado y tratarlo como un binario setuid real propiedad del root, que luego puede ser utilizada para ejecutar fácilmente código controlado por atacantes como root.
Explotación
Lo primero que haremos es evidenciar el entorno de prueba que estamos empleando, para ello revisamos la versión del Kernel de Linux y los detalles de la distribución:
En este primer caso voy a emplear el automatismo el mencionado investigador xkaneiki:
Siguiendo las indicaciones del repositorio de GitHub compilaremos las muestras necesarias, quedando como resultante los siguientes ejecutables:
Aquí para llevar a cabo una explotación exitosa precisaremos de 2 terminales, en la primera dejaremos el siguiente conjunto de instrucciones lanzadas:
Y en una terminal adicional paralela, en la que previamente revisaremos nuestros permisos actuales, ejecutaremos el exploit denominado llanamente «exp«:
Que como se ha podido observar propicia y permite la escala de privilegios de forma exitosa.
Adicionalmente observemos el registro que se genera en la primera terminal empleada:
Cabe mencionar y no es dato menor que en ocasiones, precisaremos contar con algunas dependencias y librerías para sacar adelante las compilaciones de los exploits, para ello podemos tener a mano los siguientes comandos:
sudo apt install libfuse-dev sudo apt install libcap-dev
Si lo anterior pareció simple de poner en marcha, este otro automatismo de los expertos de DataDog te parecerá aún más trivial.
Para ello en primer lugar descargaremos el exploit en C:
Lo compilaremos con la siguiente instrucción:
gcc poc.c -o poc -D_FILE_OFFSET_BITS=64 -static -lfuse -ldl
Finalmente lanzamos la ejecución del exploit y pasado escasos segundos conseguiremos una consola con los privilegios elevados:
En este ejemplo último se demuestra como es posible llegar a leer el fichero shadow, solo disponible para un usuario con privilegios en el sistema.
Como habéis podido apreciar, esta vulnerabilidad es bastante asimilable y nos puede abrir las puertas para nuestras auditorías y ejercicios de red team. No dejéis de darle una revisada de vuestro lado. Nos vemos pronto!
Referencias
- https://github.com/xkaneiki/CVE-2023-0386
- https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-0386
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4f11ada10d0a
- https://securitylabs.datadoghq.com/articles/overlayfs-cve-2023-0386/
- https://security-tracker.debian.org/tracker/CVE-2023-0386
- https://ubuntu.com/security/CVE-2023-0386
- https://github.com/CKevens/CVE-2023-0386
- https://github.com/DataDog/security-labs-pocs/tree/main/proof-of-concept-exploits/overlayfs-cve-2023-0386
- https://bugzilla.redhat.com/show_bug.cgi?id=2159505