From: "NAKAMURA, Hiroshi" Date: 2007-10-04T22:33:14+09:00 Subject: [ruby-list:44071] Re: Ruby 1.8.6-p111 / 1.8.5-p114 released (Security Fix) Shugo Maeda wrote: >> さて、net/http.rbには、 >> >> --- lib/net/http.rb.orig 2007-02-13 08:01:19.000000000 +0900 >> +++ lib/net/http.rb >> @@ -470,6 +470,7 @@ module Net #:nodoc: >> @debug_output = nil >> @use_ssl = false >> @ssl_context = nil >> + @enable_post_connection_check = true >> end >> >> def inspect >> >> といった修正が p111 の後で加えられています。これはこれで特にセキュリティ >> 上の問題とはならないと考えて良いのでしょうか? > > 1.8では互換性のため、enable_post_connection_checkはデフォルトではfalseに > なっていますので、チェックを有効にするには > > http.enable_post_connection_check = true > > のように設定する必要があります。 正確には常にチェックを行い、「不正な証明書である」となった場合に、上記の 値がtrueだと例外で停止。falseだと停止せず、警告だけ出して続行するという ことですね。RFC2818的には"SHOULD"になってるチェックですが、これは1.8.6、 1.8.5のメンテナの判断、ということでしょうか。 # 事前に知ってりゃこんなフラグなくさせたのに。verify_mode = nilで十分。 ユーザ向け情報: 今回の問題は、以下の人に影響を与えます。 1. あなたのプログラムまたは依存ライブラリのコードが、SSL接続のために net/httpsを使っており、加えて、 2. そのコードがhttp.verify_modeを明示的にOpenSSL::SSL::VERIFY_PEERに設 定しており(デフォルトではセキュリティなしのVERIFY_NONE)、加えて、 3. そのコードがhttp.ca_fileを適切に設定している。 open-uri.rbはこの問題の影響を受けません。なぜなら2と3に該当するものの、 サーバをチェックしているから。 / / / さて、http.rb以外に、1.8だとimap.rbとdrb/ssl.rbが、trunkだと加えて smtp.rbとpop.rbが、同じ問題を持っています。pop.rbとimap.rbについては、 以前に田中さんが指摘してたはず。http.rbを問題にしたのであれば、こいつら も対応が必要です。 で、今日ちょっと、OpenSSLに詳しいゆぞさんと話してたんですが、どうやって 対応しますかね。 A. 問答無用に全部post_connection_checkを追加して回る。 B. どうしても互換性が、という人のために、 環境変数ENABLE_POST_CONNECTION_CHECKを見て、それが'no'だったら チェックしないようにする。 C. 各ライブラリのチーフメンテナに依頼し、それぞれ判断してもらう。 Cは修正が長引くから駄目でしょう。1.8もtrunkも、http.rbを含めてAでいいと 思うんだけどな。どうですかmputさん。