Exception#to_s/NameError#to_s および name_err_mesg_to_str() による $SAFE 機構をバイパス可能な脆弱性について (CVE-2012-4464, CVE-2012-4466)
Posted by usa on 12 Oct 2012
Exception#to_s, NameError#to_s メソッドに $SAFE によるチェックを回避できる脆弱性が発見されました。 また、Ruby インタプリタが内部で利用する API である name_err_mesg_to_str() にも同様の脆弱性が発見されました。 脆弱性により、信頼されないコードによって任意の文字列の変更が可能です。
詳細
Ruby の $SAFE 機構では、セーフレベル4は信頼されないコードの実行に利用されます。 このため、セーフレベル4以上では、サンドボックスの外部のデータを信頼されないコードから保護するため、ある種の操作が制限されます。
Exception#to_s, NameError#to_s メソッドの処理にこの機構に関する問題が発見されました。 また、Ruby インタプリタが内部で利用する API である name_err_mesg_to_str() にも同様の問題が発見されました。 これらの処理によりセーフレベル機構が回避され、汚染されていない文字列が汚染された状態に破壊的に変更されます。 これによって、攻撃者は任意の文字列を変更することができます。
Ruby 1.8 については、以前に類似の脆弱性があり、Exception#to_s, NameError#to_s についてはこの問題は修正済みですが、name_err_mesg_to_str() API については依然として問題が存在しています。
影響のあるバージョン
- Ruby 1.8.7 patchlevel 371 以前のバージョン
- Ruby 1.9.3 patchlevel 286 以前のバージョン
- Ruby 2.0 の開発版 (r37068 以前のリビジョン)
解決策
新しいバージョンにアップグレードして下さい。
クレジット
この脆弱性については Tyler Hicks 氏により報告されました。
更新履歴
- 2012-10-12 18:56:40 (JST) 初版
最近のニュース
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