OpenSSL クライアントにおけるホスト名検証バイパス脆弱性 (CVE-2013-4073)

Posted by nahi on 27 Jun 2013
Translated by hsbt

Ruby の SSL クライアントに信頼された証明書を用いて認証されたサーバーになりすまして 中間者攻撃を可能とする脆弱性が報告されました。

この脆弱性は CVE-2013-4073 として CVE に登録されています。

脆弱性の概要

Rubyの SSL クライアントはホストネームが一意であることをチェックする機構を持っていますが、 その機構は null バイト文字が含まれている証明書のホストネームを適切に処理することができません。

脆弱性の詳細

Ruby の SSL クライアントは OpenSSL::SSL.verify_certificate_identity に RFC2818 の サーバー一意性チェックを実装していますが、 null バイト文字を含んだ X509 の subjectAltName 内の ホストネームを適切に処理出来ません。

lib/openssl/ssl.rb の実装では OpenSSL::X509::Extension#value を subjectAltName の識別子を取得するために使用しています。Extension#value は OpenSSL の X509V3_EXT_print() と subjectAltName の dNSName という値に依存し、 null バイト文字を安全に処理できない sprintf() を使用します。

結果として、Extension#value は subjectAltName として ‘www.ruby-lang.org\0.example.com’ が 与えられた際に ‘www.ruby-lang.org’ を返し、OpenSSL::SSL.verify_certificate_identity は ‘www.ruby-lang.org’ を誤った識別子として認証してしまいます。

subjectAltName に null バイト文字を持ったサーバー証明書を認証局や SSL クライアントが許可してしまう時、 リモートの攻撃者は ‘www.ruby-lang.org\0.example.com’ を ‘www.ruby-lang.org’ として信頼させ、 同時に Ruby の SSL クライアントと SSL サーバー間の中間者攻撃を可能とします。

影響するバージョン

  • ruby 1.8.7 patchlevel 374 より前の全ての ruby 1.8 系列
  • ruby 1.9.3 patchlevel 448 より前の全ての ruby 1.9 系列
  • ruby 2.0.0 patchlevel 247 より前の全ての ruby 2.0 系列
  • trunk のリビジョン 41671 より前の全ての ruby 開発バージョン

回避策

脆弱性を修正した Ruby 2.0.0-p247, 1.9.3-p448 もしくは 1.8.7-p374 へのアップグレードを行ってください。

クレジット

この脆弱性は William (B.J.) Snow Orvis 氏によって発見され、iSEC Partners の David Thiel 氏 によって security@ruby-lang.org に報告されました。

更新履歴

  • 2013-06-27 20:00:00(JST) 初版

最近のニュース

Ruby 4.0.0 リリース

Ruby 4.0.0 が公開されました。 Ruby 4.0 には “Ruby Box”、”ZJIT” ほか多数の改善が含まれています。

Posted by naruse on 25 Dec 2025

サイトのアイデンティティの再設計

サイトの包括的なデザインのアップデートを発表できることを嬉しく思います。今回の更新ではTaeko Akatsukaさんにデザインを担当していただきました。

Posted by Hiroshi SHIBATA on 22 Dec 2025

Ruby 4.0.0 preview2 リリース

Ruby 4.0.0-preview2 が公開されました。Ruby 4.0では、Unicodeバージョンの17.0.0へのアップデートなど様々な改善が行われています。

Posted by naruse on 17 Nov 2025

もっと読む...