Lỗ hổng vượt qua $SAFE qua Exception#to_s / NameError#to_s (CVE-2012-4464, CVE-2012-4466)
Đăng bởi usa vào 12 Oct 2012
Các lỗ hổng được phát hiện trong Exception#to_s, NameError#to_s và name_err_mesg_to_s() - API nội bộ của trình thông dịch Ruby. Mã độc hại của người dùng có thể vượt qua kiểm tra $SAFE bằng cách lợi dụng một trong những lỗ hổng bảo mật này.
Chi tiết
Cơ chế $SAFE của Ruby cho phép mã người dùng không đáng tin cậy chạy trong chế độ $SAFE >= 4. Đây là một dạng sandbox nên một số thao tác bị hạn chế trong chế độ này để bảo vệ dữ liệu bên ngoài sandbox.
Vấn đề được phát hiện liên quan đến cơ chế này. Exception#to_s, NameError#to_s và API nội bộ name_err_mesg_to_s() của trình thông dịch không xử lý đúng các bit $SAFE nên một đối tượng String không bị đánh dấu tainted có thể bị đánh dấu tainted một cách phá hủy bằng cách sử dụng chúng. Bằng cách này, mã không đáng tin cậy trong sandbox có thể sửa đổi một chuỗi trước đó chưa bị tainted một cách phá hủy.
Ruby 1.8 đã từng có một vấn đề bảo mật tương tự. Nó đã sửa Exception#to_s và NameError#to_s, nhưng vấn đề name_err_mesg_to_str() vẫn tồn tại sau bản vá bảo mật trước đó.
Các phiên bản bị ảnh hưởng
- tất cả Ruby 1.8.7 trước patchlevel 371
- tất cả Ruby 1.9.3 trước patchlevel 286
- tất cả các nhánh phát triển của Ruby 2.0 trước revision r37068
Giải pháp
Nâng cấp lên phiên bản mới nhất.
Ghi nhận
Lỗ hổng này được phát hiện bởi Tyler Hickes.
Cập nhật
- Ban đầu được đăng vào 2012-10-12 19:17:50 JST.
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