From: matz@... (Yukihiro Matsumoto) Date: 2003-03-21T23:33:11+09:00 Subject: [ruby-dev:19871] Re: dl in $SAFE=4 まつもと ゆきひろです In message "[ruby-dev:19865] dl in $SAFE=4" on 03/03/21, Minero Aoki writes: |ruby-list のセキュリティのスレッドを読んで穴を探してみたんですが、 |dl を経由するとなんでもできることがわかりました。たとえば次の |コードで sh が起動できます。 | | require 'dl' | $SAFE = 4 | DL.dlopen('libc.so.6').sym('system', 'IS').call("/bin/sh") | |とりあえず最低限のパッチだけ付けます。セキュリティレベル |いくつで拒否するのかという点や、ptr の汚染などはちゃんと |考える必要がありそうです。 うむ、考えた方が良いですね。でも、rb_secure(2)はきつすぎるん じゃないかと思います。taintチェックでは対応できない? あ、でも、落とす可能性があるから駄目かなあ。 戻り値はtaintした方がよいでしょうね。