Tạo tệp ngoài ý muốn do chèn ký tự NUL bất hợp pháp (CVE-2012-4522)
Đăng bởi usa vào 12 Oct 2012
Một lỗ hổng được phát hiện cho phép các thủ tục tạo tệp có thể tạo ra các tệp ngoài ý muốn bằng cách chèn chiến lược các ký tự NUL vào đường dẫn tệp. Lỗ hổng này đã được báo cáo với mã CVE-2012-4522.
Chi tiết
Ruby có thể xử lý các mẫu nhị phân tùy ý dưới dạng chuỗi (String), bao gồm cả ký tự NUL. Mặt khác, hệ điều hành và các thư viện khác thường không làm vậy. Chúng thường coi NUL là dấu hiệu Kết thúc Chuỗi. Vì vậy, để giao tiếp với chúng từ Ruby, các ký tự NUL cần được tránh đúng cách.
Tuy nhiên, các phương thức như IO#open không kiểm tra tên tệp được truyền vào, và chỉ truyền các chuỗi đó cho các thủ tục lớp thấp hơn. Điều này dẫn đến việc tạo tệp ngoài ý muốn như sau:
p File.exists?("foo") #=> false
open("foo\0bar", "w") { |f| f.puts "hai" }
p File.exists?("foo") #=> true
p File.exists?("foo\0bar") #=> raises ArgumentError
Các phiên bản bị ảnh hưởng
- 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.0 trước revision r37163
Giải pháp
Nâng cấp lên phiên bản mới nhất.
Ghi nhận
Vấn đề này được báo cáo bởi Peter Bex.
Cập nhật
- Đã sửa lỗi chính tả vào 2012-10-19 14:54:49 JST.
- Đã thêm đề cập về số CVE vào 2012-10-16 08:58:51 JST.
- Ban đầu được đăng vào 2012-10-12 19:19:55 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