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 preview2 リリース

Ruby 4.0.0-preview2 が公開されました。Ruby 4.0では、Unicodeバージョンの17.0.0へのアップデートなど様々な改善が行われています。

Posted by naruse on 17 Nov 2025

もっと読む...