Insecure TLS Renegotiation (CVE-2009-3555)
Renégociation TLS non sécurisée (CVE-2009-3555)
Description
Cette vulnérabilité indique que le serveur ne prend pas en charge la renégociation sécurisée telle que définie dans la RFC 5746, le laissant vulnérable aux attaques par injection de texte en clair lors de la renégociation du handshake TLS.
La renégociation TLS permet de modifier les paramètres de connexion pendant une session active. La spécification TLS d'origine ne parvenait pas à lier de manière cryptographique les handshakes de renégociation aux connexions existantes, créant ainsi une faille de sécurité où les attaquants peuvent injecter des données dans des sessions chiffrées.
Comment ça fonctionne :
- L'attaquant établit une connexion TLS vers le serveur cible et injecte des requêtes malveillantes.
- Le client légitime tente de se connecter au même serveur.
- L'attaquant intercepte le handshake du client en tant que "renégociation" de sa session existante.
- Le serveur traite les données initiales de l'attaquant dans le contexte du client authentifié.
Exigences :
- Le serveur prend en charge la renégociation TLS sans la RFC 5746.
- Position réseau de type Man-in-the-middle.
- Protocoles d'application qui ne font pas de distinction entre les données pré et post-authentification.
Example Scenario: Un attaquant sur un réseau WiFi public intercepte les connexions bancaires, établit une session TLS et envoie des requêtes de transfert non autorisées. Lorsque la victime s'authentifie, le serveur traite les transferts malveillants comme des requêtes légitimes provenant de l'utilisateur authentifié.
Cela affecte HTTPS, SMTP over TLS et d'autres protocoles protégés par TLS, pouvant entraîner des transactions non autorisées, des vols de données et des compromissions de comptes.
Recommandation
Pour atténuer les vulnérabilités de renégociation TLS non sécurisées, implémentez les stratégies suivantes :
Primary Mitigation - Enable RFC 5746 Support:
Mettez à niveau votre implémentation TLS pour prendre en charge la RFC 5746 (TLS Renegotiation Indication Extension). Les versions modernes d'OpenSSL, GnuTLS et d'autres bibliothèques TLS l'incluent par défaut.
# Configuration Nginx (OpenSSL 1.0.1+ prend automatiquement en charge la RFC 5746)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
# Configuration Apache (mod_ssl avec OpenSSL 1.0.1+ prend en charge la RFC 5746)
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLHonorCipherOrder on
Alternative Mitigations:
- Disable Renegotiation Entirely - Si votre application n'a pas besoin de renégociation, désactivez-la complètement :
# Nginx - renégociation désactivée par défaut dans les versions récentes
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
# Apache avec mod_ssl
SSLInsecureRenegotiation off
- Upgrade to TLS 1.3 - TLS 1.3 a repensé les mécanismes de renégociation pour qu'ils soient intrinsèquement sécurisés :
# Tester la configuration du serveur
openssl s_client -connect example.com:443 -tls1_3
Testing and Verification:
# Test de la prise en charge de la RFC 5746
openssl s_client -connect example.com:443 -reconnect
# Vérifier l'indication de renégociation sécurisée
nmap --script ssl-enum-ciphers -p 443 example.com
Java Applications:
Pour les applications Java, assurez-vous d'utiliser une JVM qui prend en charge la RFC 5746 :
# Propriété système Java pour exiger une renégociation sécurisée
-Djdk.tls.allowLegacyResumption=false
-Djdk.tls.allowLegacyMasterSecret=false
Monitoring for Attacks:
Surveillez les logs TLS à la recherche de modèles de renégociation suspects :
# Exemple d'analyse de journaux pour une activité de renégociation inhabituelle
grep -i "renegotiation\|handshake" /var/log/nginx/error.log
En implémentant la prise en charge de la RFC 5746 ou en désactivant complètement la renégociation, vous éliminez le vecteur d'attaque tout en conservant des communications TLS sécurisées.
Liens
- CVE-2009-3555
- RFC 5746 - TLS Renegotiation Indication Extension
- Microsoft Security Advisory MS10-049
Normes
- 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