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)
