Ruby 1.8.5-p231, 1.8.6-p230, 1.8.7-p22, 1.9.0-2 がリリースされましたね

Ruby 1.8.5-p231, 1.8.6-p230, 1.8.7-p22, 1.9.0-2 がリリースされたようです。リリース作業はとっても大変だと思うので感謝の気持ちでいっぱいです。ありがとうございます。

でも随分いっぱい同時に出たなぁと思ったらなんか大変そうな脆弱性ですね。

任意のコードが実行される脆弱性について

1.8の方の変更点を眺めてみました。ひょっとして Array のインデクス値の integer が溢れちゃう可能性がある(これって integer overflow ってヤツ?)のかな。あと String の方も色々変更されていますがざっと見ただけでは良く分かりませんでした、うーん、Cは難しいですね。

というわけで皆さん、四の五の言わずにアップデートしましょう!

ちなみに、お知らせとかは特に出てないのですが(でも、もう一ヶ月くらい経ったしアップデータも出ちゃったんだから、書いても大丈夫ですよね?)、1.8.7を除きこれらのアップデータ以前(例えば 1.8.6-p111 とか 1.9.0-1 とか)の Ruby にはセーフレベル4環境に関する致命的な脆弱性もまた存在します。これはセーフレベルを勝手に0に戻せちゃうという、とってもとっても陽気なバグです。つまり早い話がセーフレベル4環境が全くの台無し状態でした。よってセーフレベル4環境を信頼したプログラムを書いている人は気をつけて下さい(逆に言うとこの話はセーフレベルを使ってない人には関係ありません、だから汎用性があると思われる「任意のコードが実行される脆弱性について」よりはインパクトが弱いので、安心?して下さい)。とにかく面倒だからとっととアップデートしちゃえばいいんだと思います。まぁ実際のところ、Rubyのセーフレベル4環境を使っている人ってあんまり居ないとは思うのですが、一応注意を喚起するために書いておきました。

以前この日記でセーフレベル4環境に関する次のような記事を書いていたじゃないですか。これはこの時期なんとなくセーフレベル4環境に依存したアプリケーションを書いていたからなんですよね。

それで、あまりにセーフレベル4環境に関するノウハウがwebに落ちてないからコードを読んで勉強してたのですが、その時偶然にこれを発見しました。しかもこの脆弱性は1.8系と1.9系の両方に存在するのにそれぞれ原因が別というなんか珍しい感じのバグでした。私は脆弱性を見つけたのって初めてなので、こういう場合の報告の手順が分からなかったので直接まつもとさんにメールしちゃったんですが、Rubyにセキュリティーチームってあったんですね。ここに送るべきだったのでした、反省。

http://www.ruby-lang.org/ja/security/

まぁまずないことだろうと思いますが、次の機会があればこの窓口を利用しようと思いました。

ところでセーフレベル4環境に関する致命的な脆弱性って、2005年「セーフレベルの設定が回避可能となる脆弱性について」、2006年「alias機能の問題でセーフレベル4がサンドボックスとして機能しない脆弱性について」「特定メソッドの問題でセーフレベル 4 がサンドボックスとして機能しない脆弱性について」、一年飛んで今回2008年のこれというわけで、まぁほぼ毎年のように見つかっていることになってしまっています。正直こんな状況だと、まだなにか残っているんじゃないかと、なかなか信用ができなくて困ります。2005年、2006年と連発した時点で「こりゃ信用ならない」と様子見をしている人が多いから、セーフレベル4環境に関する情報があんまりないのかな、と思いました。実装上のバグがないことを証明するということが不可能か極めて困難であるだろうことは分かりますが、人の目に頼る以外の賢い解決策って、この21世紀にもなって何かないのでしょうか。そうでもないとなかなかセーフレベル4環境を活用し難くって困るなぁ、と悩ましく思っています。セーフレベル4環境ってすごく便利で素敵だと思うだけに、とても残念です。