net/httpsライブラリにおける「中間者によるなりすまし攻撃」に対する脆弱性について

Rubyに標準で添付されているnet/httpsライブラリ(net/https.rb)において、このライブラリを使用してhttpsプロトコルを発行した場合、中間者によるなりすまし攻撃(man-in-the-middle attack)を検出できないという問題が発見されました。

この脆弱性については、<URL:http://www.isecpartners.com/advisories/2007-006-rubyssl.txt>として公開されています。

影響

net/http.rbでは、SSL接続の際に、証明書のCNがリクエスト先のDNS名に対して検証されません。これにより、攻撃者がリクエスト先のサーバになりすますことが可能になります。

脆弱性の存在するバージョン

1.8系
1.8.4以前の全てのバージョン、1.8.5-p113以前のバージョン、1.8.6-p110以前のバージョン
開発版(1.9系)
2007-09-23より前の全てのバージョン

各バージョンでの対応方法

1.8系

1.8.6-p111または1.8.5-p114にアップグレードしてください。

チェックを有効にするためには、以下のようにNet::HTTP#enable_post_connection_check=を使用する必要があります。

http = Net::HTTP.new(host, 443)
http.use_ssl = true
http.enable_post_connection_check = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
store = OpenSSL::X509::Store.new
store.set_default_paths
http.cert_store = store
http.start {
  response = http.get("/")
}

また、Rubyのパッケージを配布している各ベンダから、それぞれ、この脆弱性を修正した版のパッケージが提供されている場合もあります。詳細については各ベンダにお問い合わせください。

開発版(1.9系)
2007-09-23以降のバージョンに更新してください。 Ruby 1.9では、Net::HTTP#enable_post_connection_checkはデフォルトでtrueになっています。

変更履歴

  • 2007-10-04 16:30 +09:00 「影響」の「DNS応答を詐称」という表現が不適切でしたので修正しました。
  • 2007-10-04 16:30 +09:00 「各バージョンでの対応方法」にenable_post_connection_checkに関する説明を追記しました。