From: Shugo Maeda Date: 2008-09-30T19:25:19+09:00 Subject: [ruby-dev:36639] Re: net/pop.rb: APOPの脆弱性対応 前田です。 2008/09/30 15:28 Kazuhiro NISHIYAMA : > http://sylpheed.sraoss.jp/diary/?date=20080926#p01 > をみて、net/pop.rbもsylpheedと同じような対応を > すればいいのではないかと思ったのですが、どうでしょうか? > > 1.8ではNet::POP3Command#apopで > if /[^!-~]/n =~ @apop_stamp || /@/ !~ @apop_stamp > raise POPAuthenticationError, 'Invalid APOP server; cannot login' > end > のようなチェックになると思います。 同じようなことですが、POP3Command#initializeでtimestampにマッチさせる 正規表現自体を以下のように変えてしまってはどうでしょうか。 def initialize(sock) @socket = sock @error_occured = false res = check_response(critical { recv_response() }) @apop_stamp = res.slice(/<[!-~]+@[!-~]+>/) end RFC1939によると、"The syntax of the timestamp corresponds to the `msg-id' in [RFC822]"とのことなので、(ちょっと正規表現が緩いですが) 問題ない気がします。 根本的な対策としては、ちゃんとした証明書でPOP over SSLを使うのがよい のでしょうね。 -- Shugo Maeda