Exceptionのメソッドの$SAFE機構をバイパス可能な脆弱性について
Posted by Shugo Maeda on 18 Feb 2011
Exception#to_sメソッドに$SAFEによるチェックを回避できる脆弱性が発見されました。この脆弱性により、信頼されないコードによって任意の文字列の変更が可能です。
詳細
Rubyの$SAFE機構では、セーフレベル4は信頼されないコードの実行に利用されます。このため、セーフレベル4以上では、サンドボックスの外部のデータを信頼されないコードから保護するため、ある種の操作が制限されます。
Exception#to_sの処理にこの機構に関する問題が発見されました。このメソッドによりセーフレベル機構が回避され、汚染されていない文字列が汚染された状態に破壊的に変更されます。これによって、以下のように、攻撃者は任意の文字列を変更することができます。
$secret_path = "foo"
proc do
$SAFE = 4
Exception.new($secret_path).to_s
$secret_path.replace "/etc/passwd"
end.call
open($secret_path) do
...
end
影響のあるバージョン
幸い、1.9.x系列にはこの脆弱性はありません。影響のあるバージョンは、以下のバージョンに限定されます。
- Ruby 1.8.6 patchlevel 420 以前のバージョン
- Ruby 1.8.7 patchlevel 330 以前のバージョン
- Ruby 1.8の開発バージョン (1.8.8dev)
解決策
新しいバージョンにアップグレードしてください。
最近のニュース
Ruby 4.0.2 リリース
Ruby 4.0.2 がリリースされました。
Posted by k0kubun on 16 Mar 2026
Ruby 3.4.9 リリース
Ruby 3.4.9 がリリースされました。
Posted by nagachika on 11 Mar 2026
関西Ruby会議09の参加登録が開始されました
日本Rubyの会が後援する、地域Ruby会議(RegionalRubyKaigi)の1つである関西Ruby会議09の参加登録が開始されました。
Posted by Yudai Takada(@ydah) on 3 Mar 2026
Ruby 4.0.0 リリース
Ruby 4.0.0 が公開されました。 Ruby 4.0 には “Ruby Box”、”ZJIT” ほか多数の改善が含まれています。
Posted by naruse on 25 Dec 2025