Các phương thức Exception có thể vượt qua $SAFE

Đăng bởi Urabe Shyouhei vào 18 Feb 2011

Phương thức Exception#to_s có thể được sử dụng để đánh lừa kiểm tra $SAFE, cho phép mã không đáng tin cậy sửa đổi các chuỗi tùy ý.

Mô tả chi tiết

Trong ngữ nghĩa $SAFE của Ruby, safe level 4 được sử dụng để chạy mã không đáng tin cậy (chẳng hạn như plugin). Vì vậy ở các safe level cao hơn, một số thao tác bị cấm để ngăn mã không đáng tin cậy tấn công dữ liệu bên ngoài (đáng tin cậy).

Exception#to_s được phát hiện có vấn đề liên quan đến điều này. Phương thức này có thể đánh lừa cơ chế safe level và đánh dấu phá hủy một chuỗi không bị tainted thành tainted. Với điều này, kẻ tấn công có thể sửa đổi các chuỗi untainted tùy ý như sau:

$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

Các phiên bản bị ảnh hưởng

May mắn thay, cuộc tấn công này không hiệu quả đối với dòng ruby 1.9.x. Các phiên bản bị ảnh hưởng chỉ giới hạn ở:

  • Ruby 1.8.6 patchlevel 420 và tất cả các phiên bản trước đó
  • Ruby 1.8.7 patchlevel 330 và tất cả các phiên bản trước đó
  • Các phiên bản phát triển của Ruby 1.8 (1.8.8dev)

Giải pháp

Vui lòng nâng cấp lên phiên bản mới hơn.

Cập nhật

Tin mới nhất

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

Thêm Tin...