Luka pozwalająca na ominięcie sprawdzenia nazwy hosta w kliencie SSL (CVE-2013-4073)

Luka bezpieczeństwa w kliencie SSL Ruby może umożliwić ataki man-in-the-middle, co pozwala atakującemu podszyć się pod domenę korzystając z poprawnego certyfikatu wydanego przez zaufany urząd certyfikacji.

Luce został przydzielony identyfikator CVE-2013-4073.

Podsumowanie

Klient SSL Ruby implementuje sprawdzenie tożsamości nazwy hosta, jednak niepoprawnie zachowuje się w przypadku, gdy nazwy hostów zawierają zerowe bajty.

Szczegóły

OpenSSL::SSL.verify_certificate_identity implementuje sprawdzenie tożsamości serwera opisane w RFC2818 dla klienta SSL Ruby, jednak niepoprawnie obsługuje nazwy hostów w polu subjectAltName rozszerzenia X509, które zawierają zerowe bajty.

Istniejący kod w lib/openssl/ssl.rb wykorzystuje metodę OpenSSL::X509::Extension#value aby odczytać tożsamość z pola subjectAltName. Metoda ta polega na funkcji X509V3_EXT_print() zawartej w OpenSSL, która aby odczytać dNSName z subjectAltName korzysta z funkcji sprintf(), która nie obsługuje poprawnie bajtów zerowych. W rezultacie metoda Extension#value zwraca ‘www.ruby-lang.org’, jeśli subjectAltName w rzeczywistości zawiera ‘www.ruby-lang.org\0.example.com’ oraz OpenSSL::SSL.verify_certificate_identity niepoprawnie uznaje, że certyfikat należy do domeny ‘www.ruby-lang.org’.

Jeśli urząd certyfikacji, któremu ufa klient pozwoli wydać certyfikat zawierający zerowy bajt w polu subjectAltName, atakujący może uzyskać certyfikat dla ‘www.ruby-lang.org\0.example.com’, aby podszyć się pod ‘www.ruby-lang.org’ i wykonać ataki typu man-in-the-middle między klientem Ruby, a serwerem SSL.

Dotyczy wersji

  • wszystkich wersji ruby 1.8 wcześniejszych niż 1.8.7 patchlevel 374
  • wszystkich wersji ruby 1.9 wcześniejszych niż 1.9.3 patchlevel 448
  • wszystkich wersji ruby 2.0 wcześniejszych niż 2.0.0 patchlevel 247
  • wcześniejszych niż rewizja trunk 41671

Rozwiązanie

Zaleca się, aby wszyscy użytkownicy zainstalowali wersję Ruby 2.0.0-p247, 1.9.3-p448 lub 1.8.7-p374.

Podziękowania

Podatność ta została znaleziona przez Williama (B.J.) Snowa Orvisa oraz skoordynowana z security@ruby-lang.org przez Davida Thiela z iSEC Partners.

Historia

  • Opublikowane 2013-06-27 11:00:00 (UTC)