From: Takaaki Tateishi Date: 2007-03-19T03:59:37+09:00 Subject: [ruby-dev:30625] Re: dl when $SAFE = 1 sheepman wrote: > という感じで、汚染されている文字列を引数として system を呼べてしまいます。 > というわけで、パッチを書いてみました。 まず始めに、以前の私の考えとしては、systemを呼び出すrubyのライブラリ側での チェックが望ましいと思っていました。dlは、拡張ライブラリを書く代わりにruby でAPIへアクセスすることを考えて作ったものですので、そのAPIへアクセスする rubyのプログラムやライブラリがSAFEのチェックをするのが良いのではないかと考 えていました。 しかし、dlは特殊な拡張ライブラリですし、dlを危ないプログラムでは外部入力に 依存するようには使わないという考えの下では、あらゆる操作を禁止するというの も同意できます。 さて、systemの例ですが、systemの呼び出しそのものはtaintチェックの対象です。 危ない関数が使われる場合にはチェックがかかるはずで、そのときには同時に引数 のチェックも行えば良いと考えることもできると思います。 dlopenについてはdlopenによって何が危険になるのかの議論が必要だと思います。 以上のことから、systemとdlopenの件はどれが適切なのか私には判断できません。 mallocによって得たオブジェクトがtaintedであるべきかどうかについては、すべて 定数から構成されたオブジェクトも危険だとすべきなのかと疑問があります。 その後の中身の変更でtaintedにしなければならない場合がありそうなことは想像で きますが、allocateの中でtaintedにする理由はどこにあるのでしょうか? -- Takaaki Tateishi