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

Obtener notas OSCP

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.

  1. Configuración de variables de entorno

    El exploit crea diferentes matrices (línea 41), que se utilizarán más adelante para almacenar el GLIBC_TUNABLES variables de entorno y desencadenar el desbordamiento del búfer en glibc cuando se ejecuta el programa.
  2. Elaboración de variables de entornorelleno: 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 al envp matriz, que contiene variables de entorno.
  3. Armamento

    La carga útil en GLIBC_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.
  4. 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 fija 0x7ffdfffff030 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 de lib6.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 no setuid(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

¿Cuál es el valor de la bandera en /root/root.txt?

Tutorial en vídeo

Acerca del Autor

Creo notas de ciberseguridad, notas de marketing digital y cursos online. También brindo consultoría de marketing digital que incluye, entre otros, SEO, Google y meta anuncios y administración de CRM.

Ver Artículos