Saltar a contenido

Insecure TLS Renegotiation (CVE-2009-3555)

Renegociación TLS insegura (CVE-2009-3555)

Descripción

Esta vulnerabilidad indica que el servidor no es compatible con la renegociación segura tal como se define en el RFC 5746, lo que lo deja vulnerable a ataques de inyección de texto plano durante la renegociación del handshake de TLS.

La renegociación de TLS permite cambiar los parámetros de conexión durante una sesión activa. La especificación original de TLS no lograba vincular criptográficamente los handshakes de renegociación a las conexiones existentes, lo que creaba una falla de seguridad donde los atacantes podían inyectar datos en sesiones cifradas.

Cómo funciona:

  1. El atacante establece una conexión TLS con el servidor de destino e inyecta solicitudes maliciosas.
  2. Un cliente legítimo intenta conectarse al mismo servidor.
  3. El atacante intercepta el handshake del cliente como una "renegociación" de su sesión existente.
  4. El servidor procesa los datos iniciales del atacante en el contexto del cliente autenticado.

Requisitos:

  • El servidor es compatible con la renegociación TLS sin el RFC 5746.
  • Posición en la red de tipo Man-in-the-middle.
  • Protocolos de aplicación que no distinguen entre datos previos y posteriores a la autenticación.

Example Scenario: Un atacante en un WiFi público intercepta las conexiones bancarias, establece una sesión TLS y envía solicitudes de transferencia no autorizadas. Cuando la víctima se autentica, el servidor procesa las transferencias maliciosas como solicitudes legítimas del usuario autenticado.

Esto afecta a HTTPS, SMTP over TLS y a otros protocolos protegidos por TLS, lo que puede provocar transacciones no autorizadas, robos de datos y compromiso de cuentas.

Recomendación

Para mitigar las vulnerabilidades de renegociación de TLS insegura, implemente las siguientes estrategias:

Primary Mitigation - Enable RFC 5746 Support:

Actualice su implementación de TLS para admitir el RFC 5746 (TLS Renegotiation Indication Extension). Las versiones modernas de OpenSSL, GnuTLS y otras bibliotecas TLS lo incluyen por defecto.

# Configuración de Nginx (OpenSSL 1.0.1+ admite automáticamente RFC 5746)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
# Configuración de Apache (mod_ssl con OpenSSL 1.0.1+ admite RFC 5746)
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLHonorCipherOrder on

Alternative Mitigations:

  1. Disable Renegotiation Entirely - Si su aplicación no necesita renegociación, desactívela por completo:
# Nginx - renegociación deshabilitada por defecto en versiones recientes
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# Apache con mod_ssl
SSLInsecureRenegotiation off
  1. Upgrade to TLS 1.3 - TLS 1.3 rediseñó los mecanismos de renegociación para que sean inherentemente seguros:
# Configuración del servidor de prueba
openssl s_client -connect example.com:443 -tls1_3

Testing and Verification:

# Prueba de soporte para RFC 5746
openssl s_client -connect example.com:443 -reconnect

# Comprobar indicación de renegociación segura
nmap --script ssl-enum-ciphers -p 443 example.com

Java Applications:

Para las aplicaciones Java, asegúrese de usar una JVM que admita el RFC 5746:

# Propiedad del sistema Java para requerir renegociación segura
-Djdk.tls.allowLegacyResumption=false
-Djdk.tls.allowLegacyMasterSecret=false

Monitoring for Attacks:

Monitoree los logs de TLS en busca de patrones de renegociación sospechosos:

# Análisis de registro de ejemplo para actividad de renegociación inusual
grep -i "renegotiation\|handshake" /var/log/nginx/error.log

Al implementar la compatibilidad con el RFC 5746 o desactivar la renegociación por completo, eliminará el vector de ataque mientras mantiene comunicaciones TLS seguras.

Enlaces

Estándares

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