Aller au contenu

TLS Client-Initiated Renegotiation DoS Vulnerability

Vulnérabilité DoS de renégociation initiée par le client TLS

Description

Cette vulnérabilité indique que le serveur autorise des renégociations TLS initiées par le client de manière illimitée, ce qui peut être exploité pour des attaques par déni de service (DoS) en forçant le serveur à effectuer des opérations cryptographiques coûteuses.

La vulnérabilité de renégociation initiée par le client survient lorsque les serveurs TLS permettent aux clients de demander de manière répétée la renégociation des paramètres TLS sans une limitation de débit adéquate. Étant donné que le serveur doit exécuter des opérations cryptographiques coûteuses en termes de calcul lors de la renégociation, cela peut être exploité pour consommer les ressources du serveur avec un effort minimal de la part de l'attaquant.

Comment ça fonctionne :

  1. L'attaquant établit une connexion TLS vers le serveur cible.
  2. L'attaquant déclenche de manière répétée des requêtes de renégociation TLS (potentiellement des milliers par seconde).
  3. Le CPU du serveur sature en traitant ces handshakes de renégociation.
  4. Les utilisateurs légitimes subissent de graves dégradations de performances ou une indisponibilité totale du service.

Exigences :

  • Un serveur TLS autorisant la renégociation initiée par le client.
  • L'absence de limitation de débit (rate limiting) ou de restriction sur les tentatives de renégociation.
  • La capacité d'établir une connexion vers le serveur cible.

Example Scenario: Un attaquant établit un petit nombre de connexions vers le serveur HTTPS d'un site bancaire, puis lance des centaines de requêtes de renégociation par seconde sur chaque connexion. L'utilisation du CPU du serveur grimpe à 100 % alors qu'il traite ces opérations cryptographiques, provoquant l'expiration (timeout) ou l'échec total des transactions légitimes. Avec seulement quelques connexions d'attaque, l'attaquant parvient à créer un déni de service efficace en utilisant une bande passante minimale.

L'attaque exploite l'asymétrie de calcul entre le client et le serveur lors de la renégociation TLS, le serveur devant effectuer beaucoup plus de travail que le client. Cela en fait un vecteur de DoS particulièrement efficace qui peut affecter tout service utilisant TLS, y compris HTTPS, SMTP over TLS et d'autres protocoles sécurisés.

Recommandation

Pour atténuer les vulnérabilités de renégociation TLS initiée par le client, implémentez les stratégies suivantes :

Primary Mitigations:

  1. Disable Client-Initiated Renegotiation - La mesure d'atténuation la plus efficace consiste à désactiver complètement la renégociation initiée par le client, tout en autorisant la renégociation initiée par le serveur lorsque cela est nécessaire.

  2. Implement Renegotiation Rate Limiting - Si la renégociation client ne peut pas être désactivée, mettez en place une limitation de débit stricte sur la fréquence à laquelle un client peut demander une renégociation.

  3. Update TLS Libraries - Assurez-vous que toutes les implémentations TLS sont mises à jour pour inclure des protections contre les attaques DoS basées sur la renégociation.

Implementation Examples:

# Configuration Nginx
# Désactiver la renégociation client
ssl_prefer_server_ciphers on;
ssl_protocols TLSv1.2 TLSv1.3;
# Configuration Apache
# Désactiver la renégociation client tout en conservant la renégociation serveur
SSLProtocol -all +TLSv1.2 +TLSv1.3
SSLOptions +NoRenegotiate
# Configuration OpenSSL (pour les applications personnalisées)
SSL_CTX_set_options(ctx, SSL_OP_NO_CLIENT_RENEGOTIATION);

For Load Balancers:

# Configuration F5 BIG-IP
modify ltm profile client-ssl my_ssl_profile {
    renegotiation disabled
}

Additional Safeguards:

  • Déployez un Web Application Firewall (WAF) pour détecter et bloquer les requêtes de renégociation excessives.
  • Implémentez une limitation de débit des connexions et des requêtes au niveau du réseau.
  • Envisagez de passer à TLS 1.3, qui élimine complètement la renégociation.
  • Configurez des politiques de timeout réseau pour fermer les connexions qui tentent une renégociation excessive.

Verifying Your Configuration:

# Test de la renégociation client utilisant OpenSSL
openssl s_client -connect example.com:443 -tls1_2
# Tapez ensuite "R" et appuyez sur Entrée pour demander une renégociation
# Si la connexion se termine ou renvoie une erreur, la renégociation client est désactivée

Liens

Normes

  • SOC2_CONTROLS:
    • CC_6_7
    • CC_7_1
  • CCPA:
    • CCPA_1798_150
  • HIPAA_CONTROLS:
    • SECURITY252
    • SECURITY212
    • SECURITY213
  • GDPR:
    • ART_32
  • PCI_STANDARDS:
    • REQ_2_3
    • REQ_6_5
    • REQ_11_3