Umgehung von Hostname-Check im SSL-Client (CVE-2013-4073)

Es wurde eine Sicherheitslücke in Rubys SSL-Client gefunden, die es einem Man-in-the-middle-Angreifer ermöglicht, SSL-Server trotz eines validen und von einer vertrauenswürdigen Certificate Authority ausgestellten Zertifikats zu fälschen.

Dieser Sicherheitslücke wurde die CVE-Kennung CVE-2013-4073 zugewiesen.

Zusammenfassung

Rubys SSL-Client implementiert eine Hostnamen-Überprüfung, führt diese allerdings nicht korrekt durch, wenn der Hostname im Zertifikat NUL-Bytes enthält.

Details

OpenSSL::SSL.verify_certificate_identity implementiert den RFC2818-Server-Identitätscheck für Rubys SSL-Client. Dieser Algorithmus arbeitet momentan allerdings nicht korrekt, wenn die Hostnamen in der X509-Erweiterung subjectAltName NUL-Bytes enthalten.

Der vorhandene Code in lib/openssl/ssl.rb nutzt OpenSSL::X509::Extension#value, um die Identität aus dem subjectAltName zu extrahieren. Extension#value wiederum hängt von der OpenSSL-Funktion X509V3_EXT_print() ab und nutzt für den dNSName des subjectAltName die Funktion sprintf(), die bekanntermaßen unsicher im Bezug auf NUL-Bytes ist. Ergebnis ist, dass Extension#value www.ruby-lang.org zurückgibt, wenn der subjectAltName auf www.ruby-lang.org\0.example.com lautet. OpenSSL::SSL.verify_certificate_identity erkennt daraufhin das Zertifikat fälschlicherweise für www.ruby-lang.org an.

Erlaubt nun eine CA, der der SSL-Client vertraut, NUL-Bytes im subjectAltName, so kann ein Angreifer von der CA ein Zertifikat für www.ruby-lang.org\0.example.com beantragen und damit einen Man-in-the-middle-Angriff auf Rubys SSL-Client für www.ruby-lang.org durchführen.

Betroffene Versionen

  • Alle 1.8er-Versionen vor 1.8.7 patchlevel 374
  • Alle 1.9er-Versionen vor 1.9.3 patchlevel 448
  • Alle 2.0er-Versionen vor 2.0.0 patchlevel 247
  • Alle Trunk-Versionen vor Revision 41671

Lösung

Wir empfehlen allen Nutzern, auf Ruby 2.0.0-p247, 1.9.3-p448 oder 1.8.7-p374 zu aktualisieren.

Danksagung

Diese Sicherheitslücke wurde von William (B.J.) Snow Orvis entdeckt und mit security@ruby-lang.org über David Thiel von iSEC Partners koordiniert.

Historie

  • Erstmals veröffentlicht am 2013-06-27 11:00:00 (UTC)