cd ~/blog

~/vulns/debian-openssl-predictable-prng-cve-2008-0166.md

Debian OpenSSL Predictable PRNG (CVE-2008-0166)

misc 18-06-2026
OpenSSLSSHcrypto

~2 min de lectura


1. Descripción técnica del ataque

CVE-2008-0166 es un fallo crítico introducido por un patch de Debian en el paquete OpenSSL. Entre 2006 y 2008, un mantenedor eliminó —para silenciar un aviso de Valgrind— las líneas que añadían entropía al generador de números pseudoaleatorios (PRNG) de OpenSSL.

Como consecuencia, la única fuente de aleatoriedad que quedaba era el PID del proceso (máximo 32.768 valores). Esto significa que todas las claves criptográficas generadas en sistemas Debian/Ubuntu afectados (claves SSH, certificados SSL/TLS, claves OpenVPN, etc.) provienen de un conjunto reducido y predecible: solo existen ~32.768 claves posibles por tipo/tamaño y arquitectura.

Un atacante puede precomputar todas las claves posibles y, dado una clave pública (o el acceso a un servicio que la use), encontrar la clave privada correspondiente por fuerza bruta en segundos.

2. Impacto de la vulnerabilidad

  • Compromiso de claves SSH: si un servidor confía en una clave pública generada en un sistema vulnerable, el atacante recupera la privada y se autentica.
  • Compromiso de certificados TLS, claves OpenVPN, etc. generados en el periodo afectado.
  • Impacto masivo en su momento: millones de claves quedaron comprometidas y debieron regenerarse.

3. Historia y evolución

  • El patch defectuoso se introdujo en septiembre de 2006 y pasó desapercibido hasta mayo de 2008, cuando se publicó CVE-2008-0166 (DSA-1571).
  • Se publicaron listas precomputadas de todas las claves débiles (los "blacklists") y exploits como el 5720.py del equipo WarCat.
  • Es un caso de estudio clásico sobre los peligros de modificar código criptográfico y sobre la importancia de la entropía.

4. Factores que la hacen posible

  1. Claves generadas en un Debian/Ubuntu vulnerable (OpenSSL 0.9.8c-1 a 0.9.8g-9) entre 2006-2008.
  2. Que esas claves sigan en uso (no regeneradas tras el parche).
  3. Acceso del atacante a la clave pública o a un servicio que la acepte.

5. Detección

  • Identificar el contexto: una pista (p. ej. una nota mencionando que las claves se generaron con OpenSSL) o servicios SSH antiguos.
  • Buscar el exploit y las claves precomputadas:
searchsploit openssl ssh
# OpenSSL 0.9.8c-1 < 0.9.8g-9 (Debian and Derivatives) - Predictable PRNG Brute Force SSH | linux/remote/5720.py
  • Descargar el set de claves precomputadas (5622.tar.bz2) y probar contra el servicio.

6. Mitigación

  1. Regenerar todas las claves (SSH, TLS, etc.) generadas en sistemas afectados, con una versión parcheada de OpenSSL.
  2. Revocar y reemitir certificados comprometidos.
  3. Mantener OpenSSL actualizado y nunca modificar el código de entropía.

7. Ejemplo de explotación real

Máquina Ephemeral 3 de HMV. Con las claves precomputadas, fuerza bruta de la clave privada SSH del usuario randy:

 wget https://gitlab.com/exploit-database/exploitdb-bin-sploits/-/raw/main/bin-sploits/5622.tar.bz2
 tar -xvf 5622.tar.bz2

 python2 5720.py rsa/2048/ 192.168.1.33 randy 22 5
-OpenSSL Debian exploit- by ||WarCat team|| warcat.no-ip.org
...
Key Found in file: 0028ca6d22c68ed0a1e3f6f79573100a-31671
Execute: ssh -lrandy -p22 -i rsa/2048//0028ca6d22c68ed0a1e3f6f79573100a-31671 192.168.1.33

 ssh randy@192.168.1.33 -i rsa/2048/0028ca6d22c68ed0a1e3f6f79573100a-31671
randy@ephemeral:~$

8. Clasificación

  • Tipo: Insufficient Entropy / Use of Cryptographically Weak PRNG
  • CVE: CVE-2008-0166
  • CWE:
    • CWE-330 – Use of Insufficiently Random Values
    • CWE-338 – Use of Cryptographically Weak PRNG

9. Resumen

CVE-2008-0166 redujo la entropía del PRNG de OpenSSL en Debian/Ubuntu (2006-2008) al PID del proceso, generando solo ~32.768 claves posibles. Con las listas precomputadas y exploits como 5720.py, se recupera la clave privada SSH a partir de la pública en segundos. La defensa es regenerar todas las claves con OpenSSL parcheado.

// relacionados