Cubrimos y explicamos CVE-2023-4911 Looney Tunables que afecta principalmente a todas las distribuciones de Linux y permite a un atacante escalar privilegios a root. La vulnerabilidad afecta al cargador dinámico de la biblioteca GNU C, conocido como ld.so, mientras procesa la variable de entorno GLIBC_TUNABLES. Este problema podría permitir que un atacante local utilice variables de entorno GLIBC_TUNABLES diseñadas con fines malintencionados al iniciar archivos binarios con permiso SUID para ejecutar código con privilegios elevados. Usamos una configuración de laboratorio específicamente para probar este exploit usando PruebaHackMe.
LD.SO: El enlazador/cargador dinámico
Siempre que ejecuta un archivo ELF que depende de bibliotecas compartidas (.entonces
archivos), el sistema operativo necesitará cargar dichas bibliotecas y vincularlas a su ejecutable para que cualquier función compartida esté disponible para su programa durante su ejecución. En linux sistemas, esto normalmente es gestionado por ld.so
, un ejecutable preempaquetado como parte del glibc
biblioteca.
Cada ejecutable ELF contiene una sección llamada .interp
, donde se especifica la ubicación de su cargador requerido para que el sistema operativo sepa qué cargador específico usar.
CVE-2023-4911 Explotación de vulnerabilidad
Profundizaremos más en la fase de explotación utilizando lo siguiente prueba de concepto.
- Configuración de variables de entorno
El exploit crea diferentes matrices (línea 41), que se utilizarán más adelante para almacenar elGLIBC_TUNABLES
variables de entorno y desencadenar el desbordamiento del búfer en glibc cuando se ejecuta el programa. - Elaboración de variables de entorno
relleno
: Esta variable se crea para rellenar la sección de lectura y escritura del cargador. Está lleno de una larga secuencia de caracteres 'F' ('F'). (líneas 17-23)
kv
: Esta variable es la carga útil que desencadenará el desbordamiento del búfer. Está lleno de una larga secuencia de caracteres 'A' ('A'). (líneas 27-33)
relleno2
: Similar al relleno, esta variable se utiliza para rellenar cualquier porción sobrante. También está lleno de una secuencia de caracteres 'F'. (líneas 37-43)
dt_rpath
: Esta variable se utiliza para elaborar un valor específico.-0x14ULL
para sobrescribir regiones de memoria en el proceso de explotación. (líneas 47-53) Todas esas variables se copiarán alenvp
matriz, que contiene variables de entorno. - Armamento
La carga útil enGLIBC_TUNABLES
hace lo siguiente en ld.so: sobrescribe un segmento de la pila con un índice que apunta a una cadena con"
como su contenido. La intención aquí es manipular la pila para que el índice apunte a una dirección de memoria específica donde se almacena el carácter "(una comilla doble). La pila es una región de memoria que se utiliza para almacenar variables locales e información de llamadas a funciones durante la ejecución del programa. Para aumentar la complejidad del exploit, los sistemas operativos modernos aleatorizan la ubicación de la pila, lo que dificulta predecir dónde terminará el índice en la memoria. - Explotación:
El exploit utiliza un enfoque de prueba y error para tener en cuenta la aleatoriedad de la ubicación de la pila. Ejecuta repetidamente el programa (bifurcándolo y ejecutándolo) hasta que tiene suerte y la dirección fija0x7ffdfffff030
coincide con la dirección donde el índice de la pila apunta a “. Esto manipula efectivamente la ruta de búsqueda de la biblioteca para que apunte al directorio llamado"
que contendrá una versión maliciosa delib6.so
.
El proceso para generar el falsificado.libc6.so
consiste en copiar libc6.so pero reemplazando el__libc_start_main
funcionar con un shellcode personalizado que nosetuid(0) + setgid(0) + exec('/bin/sh')
. Puedes encontrar el script Python para esto. aquí.
El programa entra en un bucle donde bifurca un proceso hijo: en el proceso hijo, intenta ejecutar/usr/bin/su
con--ayuda
. Si el proceso hijo tarda más de un segundo, se supone que está regresando de un shell, lo que indica una posible explotación exitosa.
CVE-2023-4911 Mitigación
Si no puedes parchear, sigue las instrucciones. este enlace para mitigación
Remediación CVE-2023-4911
Parchear su sistema es la mejor y única forma de solucionarlo.
Respuestas de la habitación
/root/root.txt
?Tutorial en vídeo