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.0 リリース
Ruby 4.0.0 が公開されました。 Ruby 4.0 には “Ruby Box”、”ZJIT” ほか多数の改善が含まれています。
Posted by naruse on 25 Dec 2025
サイトのアイデンティティの再設計
サイトの包括的なデザインのアップデートを発表できることを嬉しく思います。今回の更新ではTaeko Akatsukaさんにデザインを担当していただきました。
Posted by Hiroshi SHIBATA on 22 Dec 2025
Ruby 4.0.0 preview3 リリース
Ruby 4.0.0-preview3 が公開されました。
Posted by naruse on 18 Dec 2025
Ruby 4.0.0 preview2 リリース
Ruby 4.0.0-preview2 が公開されました。Ruby 4.0では、Unicodeバージョンの17.0.0へのアップデートなど様々な改善が行われています。
Posted by naruse on 17 Nov 2025