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 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...