Saltar a contenido

CRIME Attack on TLS Compression

Ataque CRIME en la compresión TLS

Descripción

Esta vulnerabilidad indica que el servidor es susceptible a ataques CRIME, los cuales aprovechan la compresión TLS para extraer información confidencial, como cookies de autenticación, a través del análisis del ratio de compresión.

CRIME (Compression Ratio Info-leak Made Easy) ocurre cuando las conexiones TLS utilizan la compresión DEFLATE, que elimina las cadenas duplicadas para reducir el ancho de banda. Los atacantes aprovechan este mecanismo inyectando datos controlados que coinciden parcialmente con información secreta y observando cómo la compresión afecta el tamaño de la carga útil cifrada.

Cómo funciona:

  1. El atacante fuerza al navegador de la víctima a realizar solicitudes HTTPS al sitio web objetivo.
  2. Las solicitudes maliciosas contienen conjeturas que coinciden parcialmente con los valores secretos de la cookie.
  3. Cuando las conjeturas coinciden con el contenido real de la cookie, la compresión reduce el tamaño de la carga útil.
  4. El atacante mide la longitud de las solicitudes cifradas para validar las conjeturas correctas.
  5. El proceso se repite byte por byte hasta extraer la cookie completa.

Requisitos:

  • Tanto el cliente como el servidor deben admitir la compresión TLS DEFLATE.
  • Posición en la red tipo Man-in-the-middle para observar el tráfico.
  • Capacidad para inyectar JavaScript o controlar las solicitudes de la víctima.
  • Los secretos objetivo deben aparecer en los datos de la solicitud comprimida.

Example Scenario: Un usuario se conecta al sitio web de un banco a través de una red WiFi pública. Un atacante inyecta código JavaScript que realiza miles de solicitudes HTTPS con conjeturas sobre la cookie como "sessionid=a", "sessionid=b", etc. Cuando la conjetura coincide con la cookie de sesión real, la compresión DEFLATE reconoce la cadena duplicada y genera una carga útil más pequeña. Al medir los tamaños cifrados, el atacante puede extraer la cookie de sesión completa en minutos.

La vulnerabilidad afecta a navegadores antiguos (versiones de Chrome/Firefox anteriores a 2012) que admitían la compresión TLS, lo que permite el secuestro completo de sesión y el acceso no autorizado a la cuenta mediante ataques de oráculo de compresión.

Recomendación

Para mitigar los ataques CRIME:

Defensa Principal - Deshabilitar la compresión TLS:

# Nginx - La compresión TLS está deshabilitada por defecto
# Asegúrese de no habilitar explícitamente la compresión

# Apache - Deshabilitar la compresión TLS
SSLCompression off
# Aplicaciones Python
import ssl
context = ssl.create_default_context()
context.options |= ssl.OP_NO_COMPRESSION

Actualizar el Software:

La mayoría de navegadores y servidores modernos tienen la compresión TLS deshabilitada por defecto: - Chrome/Firefox eliminaron el soporte para compresión TLS en 2012. - Actualice a las últimas versiones de OpenSSL (las versiones 1.0.0+ la deshabilitan por defecto). - Utilice TLS 1.3, el cual elimina por completo la compresión.

Pruebas para compresión TLS:

# Comprobar si el servidor soporta compresión TLS
openssl s_client -connect example.com:443 < /dev/null 2>&1 | grep -i compression

# Debería mostrar: "Compression: NONE"
# Vulnerable si muestra: "Compression: zlib compression"

# Prueba alternativa
nmap --script ssl-enum-ciphers -p 443 example.com

Mitigaciones adicionales:

  • Implementar tokens CSRF con relleno (padding) aleatorio para reducir la eficiencia de la compresión.
  • Utilizar una gestión de sesiones segura con una rotación frecuente de tokens.
  • Monitorizar patrones de solicitudes inusuales que puedan indicar posibles ataques.
  • Habilitar HSTS para evitar intentos de degradación de protocolo.

Las aplicaciones modernas suelen estar protegidas, dado que la compresión TLS se deshabilitó de manera generalizada tras la divulgación de CRIME en 2012, pero los sistemas heredados (legacy) podrían seguir siendo vulnerables.

Enlaces

Estándares

  • SOC2_CONTROLS:
    • CC_6_7
    • CC_7_1
  • HIPAA_CONTROLS:
    • SECURITY252
    • SECURITY212
    • SECURITY213
  • CCPA:
    • CCPA_1798_150
  • GDPR:
    • ART_32
  • PCI_STANDARDS:
    • REQ_4_1
    • REQ_6_2
    • REQ_11_3