En el año 2023, el equipo de Qualys reportó una vulnerabilidad con una alta criticidad que afectaba a una gran cantidad de versiones de Linux. Esta consistía en una escalada de privilegios locales al aprovechar el desbordamiento del búfer en el cargador dinámico de la biblioteca GNU C (glibc).
El cargador dinámico al procesar la variable de entorno GLIBC_TUNABLES produce este desbordamiento, y un agente malicioso podría utilizar esta variable para iniciar archivos binarios con permisos de SUID, lo que le permitiría ejecutar código con privilegios elevados.
Para replicar esta vulnerabilidad se implementó un entorno de pruebas. En primer lugar, hay que acceder a la maquina vulnerable:
Para realizar la explotación se tiene que entender el POC que se proporciona.
El cargador dinámico utiliza las variables de entorno gclib_tunables, que permiten a los desarrolladores alterar dinámicamente el comportamiento de la biblioteca en tiempo de ejecución.
En este caso, el código busca cualquier variable gclib_tunables en las variables de entorno y las copia a una nueva variable. La vulnerabilidad surge cuando la variable contiene entradas inesperadas, ya que no son manejadas con seguridad y provocando un desbordamiento del búfer.
Como requisito de explotación se debe contar con:
- Ejecución de código con privilegios limitados en un sistema vulnerable.
PoC
Tras comprobar que es vulnerable a Looney Tunables, con la ayuda del archivo gen_libc.py, el cual en este caso se encuentra ya dentro de la máquina, la ejecutamos para generar el exploit.
El siguiente paso es compilar el exploit utilizando GCC. El archivo que hay que compilar es el exp.c
Tras la ejecución de ambos comandos se habrán generado dos archivos, las POC necesarios para la explotación de la vulnerabilidad:
Tras la ejecución del archivo que contenía el exploit, después de un breve periodo de tiempo se puede observar como la explotación se ha completado y se ha conseguido realizar la escalada de privilegios exitosamente.
Conclusión
Esta vulnerabilidad en la biblioteca GNU C (glibc) subraya la importancia de una gestión segura de las variables de entorno en sistemas Linux. Para mitigar concretamente esta vulnerabilidad se debe actualizar el paquete glibc a las nuevas versiones disponibles en conjunto se debe comprobar que los cambios se han aplicado de forma satisfactoria.