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
- 1.8.7-334 đã được phát hành để sửa vấn đề này. Người dùng 1.8.7 được khuyến khích nâng cấp.
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