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 3.3.12 リリース
Ruby 3.3.12 がリリースされました。
Posted by hsbt on 16 Jul 2026
Ruby 3.4.10 リリース
Ruby 3.4.10 がリリースされました。
Posted by nagachika on 30 Jun 2026
Ruby 4.0.2 リリース
Ruby 4.0.2 がリリースされました。
Posted by k0kubun on 16 Mar 2026
Ruby 3.4.9 リリース
Ruby 3.4.9 がリリースされました。
Posted by nagachika on 11 Mar 2026