CCS Injection Attack on OpenSSL
Attaque par injection CCS sur OpenSSL
Description
Cette vulnérabilité indique que le serveur est vulnérable aux attaques par injection CCS, qui exploitent une mauvaise gestion des messages ChangeCipherSpec dans OpenSSL pour forcer l'utilisation de clés de chiffrement faibles pendant les poignées de main (handshakes) TLS.
L'injection CCS (ChangeCipherSpec) se produit lorsqu'OpenSSL accepte des messages CCS dans le désordre, avant que le secret maître (master secret) n'ait été correctement établi. Cela oblige le système à générer des clés de chiffrement en utilisant un secret maître vide au lieu du secret réellement négocié, ce qui donne des clés faibles et prévisibles.
Comment ça marche :
- L'attaquant intercepte la poignée de main TLS après le ServerHello mais avant la génération du secret maître
- Le message CCS malveillant est injecté à la fois dans les connexions du client et du serveur
- Les deux points d'extrémité génèrent des clés de session à l'aide d'un secret maître vide (que des zéros)
- L'attaquant peut déchiffrer tout le trafic ultérieur à l'aide des clés prévisibles et faibles
Exigences :
- Le client et le serveur doivent tous deux utiliser des versions vulnérables d'OpenSSL
- Capacité d'accès au réseau pour mener une attaque de l'homme du milieu (man-in-the-middle)
- Les serveurs OpenSSL 1.0.1+ sont particulièrement exploitables
Exemple de scénario : Une application web utilise OpenSSL 1.0.1g sur le client et le serveur. Un attaquant sur le même réseau injecte des messages CCS pendant la poignée de main TLS, forçant les deux parties à utiliser des clés de chiffrement dérivées d'un secret maître vide. L'attaquant peut ensuite déchiffrer tout le trafic HTTPS, y compris les identifiants de connexion et les cookies de session.
La vulnérabilité a existé dans OpenSSL pendant plus de 15 ans avant d'être découverte, affectant pratiquement toutes les connexions SSL/TLS utilisant des versions vulnérables d'OpenSSL et permettant la compromission complète de la session.
Recommandation
Pour atténuer les attaques par injection CCS :
Défense principale - Mettre à jour OpenSSL :
Mettez à jour immédiatement vers les versions patchées d'OpenSSL :
- OpenSSL 1.0.1h ou plus récent
- OpenSSL 1.0.0m ou plus récent
- OpenSSL 0.9.8za ou plus récent
# Vérifier la version actuelle
openssl version
# Mettre à jour les paquets
apt-get update && apt-get upgrade openssl # Debian/Ubuntu
yum update openssl # RHEL/CentOS
Redémarrer les services :
Après la mise à jour, redémarrez tous les services utilisant OpenSSL :
systemctl restart apache2 # or nginx, postfix, etc.
systemctl restart postfix
systemctl restart dovecot
Tester la vulnérabilité :
# Test du serveur pour la vulnérabilité d'injection CCS
openssl s_client -connect example.com:443 -msg 2>&1 | grep -i "early ccs"
# Utiliser le test SSL Labs
curl "https://api.ssllabs.com/api/v3/analyze?host=example.com"
Atténuations supplémentaires :
- Surveiller le trafic réseau pour détecter des modèles de messages CCS inhabituels
- Implémenter le certificate pinning lorsque cela est possible pour détecter les tentatives de MITM
- Utiliser des implémentations TLS non-OpenSSL (NSS, GnuTLS) pour les applications critiques
- Activer la confidentialité persistante parfaite (perfect forward secrecy) pour limiter les dégâts en cas de compromission des clés
L'injection CCS n'expose pas les clés privées ni les certificats, le remplacement des certificats n'est donc pas nécessaire après l'application du correctif.
Liens
Normes
- SOC2_CONTROLS:
- CC_6_7
- CC_7_1
- CCPA:
- CCPA_1798_150
- GDPR:
- ART_32
- HIPAA_CONTROLS:
- SECURITY252
- SECURITY212
- SECURITY213
- SECURITY255
- SECURITY258
- PCI_STANDARDS:
- REQ_4_1
- REQ_6_2
- REQ_11_3