Vulnérabilité dans le client SSL permettant de contourner la vérification du nom de domaine (CVE-2013-4073)
Posté par nahi le 2013-06-27
Traduit par Bruno Michel
Une vulnérabilité a été trouvée dans le client SSL de Ruby. Elle permet à des attaquants d’opérer un man-in-the-middle pour se faire passer pour des serveurs SSL, via des certificats valides émis par une autorité de certification de confiance.
L’identifiant CVE-2013-4073 a été assigné à cette vulnérabilité.
Résumé
Le client SSL de Ruby implémente une vérification de l’identité des noms de domaine, mais il ne gère pas correctement les noms de domaine qui contiennent des caractères null dans le certificat.
Détails
OpenSSL::SSL.verify_certificate_identity implémente la vérification de
l’identité des serveurs telle que décrite dans la RFC2818, mais elle ne gère
pas correctement les noms de domaine dans l’extension X509 subjectAltName qui
contiennent des caractères null.
Le code existant dans lib/openssl/ssl.rb utilise
OpenSSL::X509::Extension#value pour extraire l’identité depuis le
subjectAltName. Extension#value dépend de la fonction OpenSSL
X509V3_EXT_print() et pour dNSName de subjectAltName, elle utilise
sprintf() qui est connue pour n’être pas sûre avec les caractères null.
Ainsi, Extension#value retourne ‘www.ruby-lang.org’ si le subjectAltName est
‘www.ruby-lang.org\0.example.com’ et
OpenSSL::SSL.verify_certificate_identity va alors identifier incorrectement
le certificat pour ‘www.ruby-lang.org’.
Quand une autorité de confiance pour le client SSL autorise à émettre un certificat serveur avec des caractères null dans le subjectAltName, les attaquants à distance peuvent de fait obtenir le certificat pour ‘www.ruby-lang.org\0.example.com’ depuis l’autorité de certification, pour se faire passer pour ‘www.ruby-lang.org’ et ainsi effectuer une attaque de type man-in-the-middle entre le client SSL de Ruby et les serveurs SSL.
Versions concernées
- Toutes les versions de Ruby 1.8 antérieures à Ruby 1.8.7 patchlevel 374
- Toutes les versions de Ruby 1.9 antérieures à Ruby 1.9.3 patchlevel 448
- Toutes les versions de Ruby 2.0 antérieures à Ruby 2.0.0 patchlevel 247
- Les révisions antérieures à 41671 du trunk
Solution
Tous les utilisateurs sont encouragés à mettre à jour Ruby vers les versions 2.0.0-p247, 1.9.3-p448 ou 1.8.7-p374.
Remerciement
Cette vulnérabilité a été trouvée par William (B.J.) Snow Orvis et la coopération avec security@ruby-lang.org a été effectuée par David Thiel d’iSEC Partners.
Histoire
- Publié à l’origine à 2013-06-27 11:00:00 (UTC)
Actualité récente
Ruby 3.2.10 est disponible
Ruby 3.2.10 est désormais disponible.
Posté par hsbt le 2026-01-14
Ruby 4.0.1 est disponible
Ruby 4.0.1 est désormais disponible.
Posté par k0kubun le 2026-01-13
La documentation de Ruby fait peau neuve
Après la refonte de ruby-lang.org, nous avons d’autres bonnes nouvelles pour célébrer le 30e anniversaire de Ruby : docs.ruby-lang.org fait peau neuve avec Aliki, le...
Posté par Stan Lo le 2025-12-23
Refonte de l'identité visuelle de notre site
Nous sommes ravis d’annoncer une refonte complète de notre site. Le style de cette mise à jour a été créé par Taeko Akatsuka.
Posté par Hiroshi SHIBATA le 2025-12-22