山口と申します。
tempfile.rb における Tempfile#path (@tmpname) の値をTempfileオブジェクト作成時に freeze
するためのパッチを投稿致します。

現在 1.8, 1.9 共に tempfile.rb における Tempfile#path (@tmpname) の値は freeze
されていません。このため、

- 環境変数 TMP 等が設定されていること
- セーフレベル0でTempfileオブジェクトが作成されていること

の二点を条件として、セーフレベル4環境から任意のファイルを削除できる可能性があります。

$SAFE = 0
require "tempfile"

tmp = Tempfile.new("test")

Thread.new do
  $SAFE = 4
  eval('tmpfile.path.replace("hello.txt")')
end.join
# => removing hello.txt...done

これはセーフレベル4環境を導入する以前に tmpfile.path.freeze
を行なうことで簡単に防ぐことが出来るのですが、tmpfile.path の値が変更可能である利点はないと思われますので、Tempfile
オブジェクトが作成された時点で @tmpname を freeze しておいた方が良いと考えます。いかがでしょうか。

Index: lib/tempfile.rb
===================================================================
--- lib/tempfile.rb	(revision 17564)
+++ lib/tempfile.rb	(working copy)
@@ -40,6 +40,7 @@

       begin
 	tmpname = File.join(tmpdir, make_tmpname(basename, n))
+        tmpname.freeze
 	lock = tmpname + '.lock'
 	n += 1
       end while @@cleanlist.include?(tmpname) or

---
北海道大学大学院文学研究科専門研究員
山口慶太
keita.yamaguchi / gmail.com