Lỗ hổng DoS trong REXML
Đăng bởi Shugo Maeda vào 23 Aug 2008
Có lỗ hổng DoS trong thư viện REXML được bao gồm trong Thư viện Tiêu chuẩn Ruby. Kỹ thuật tấn công gọi là "XML entity explosion" có thể được sử dụng để làm sập (vô hiệu hóa) từ xa bất kỳ ứng dụng nào phân tích XML do người dùng cung cấp bằng REXML.
Hầu hết các ứng dụng Rails sẽ bị ảnh hưởng vì Rails phân tích XML do người dùng cung cấp bằng REXML theo mặc định.
Tác động
Kẻ tấn công có thể gây ra từ chối dịch vụ bằng cách khiến REXML phân tích một tài liệu chứa các thực thể lồng nhau đệ quy như:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE member [
<!ENTITY a "&b;&b;&b;&b;&b;&b;&b;&b;&b;&b;">
<!ENTITY b "&c;&c;&c;&c;&c;&c;&c;&c;&c;&c;">
<!ENTITY c "&d;&d;&d;&d;&d;&d;&d;&d;&d;&d;">
<!ENTITY d "&e;&e;&e;&e;&e;&e;&e;&e;&e;&e;">
<!ENTITY e "&f;&f;&f;&f;&f;&f;&f;&f;&f;&f;">
<!ENTITY f "&g;&g;&g;&g;&g;&g;&g;&g;&g;&g;">
<!ENTITY g "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx">
]>
<member>
&a;
</member>Các phiên bản bị ảnh hưởng
1.8 series
- 1.8.6-p287 và tất cả các phiên bản trước đó
- 1.8.7-p72 và tất cả các phiên bản trước đó
1.9 series
- tất cả các phiên bản
Giải pháp
Vui lòng tải bản vá monkey patch sau để sửa vấn đề này.
Sau đó sửa ứng dụng của bạn để tải rexml-expansion-fix2.rb trước khi sử dụng REXML.
require "rexml-expansion-fix2"
...
doc = REXML::Document.new(str)
...Nếu bạn có ứng dụng Rails, hãy sao chép rexml-expansion-fix2.rb vào thư mục trên đường dẫn tải (chẳng hạn RAILS_ROOT/lib/), và thêm dòng sau vào config/environment.rb.
require "rexml-expansion-fix2"Nếu ứng dụng của bạn là Rails 2.1 trở lên, bạn chỉ cần sao chép rexml-expansion-fix2.rb vào RAILS_ROOT/config/initializers và nó sẽ được tự động tải.
Theo mặc định, giới hạn mở rộng thực thể XML là 10000. Bạn có thể thay đổi bằng cách thay đổi REXML::Document.entity_expansion_limit. Ví dụ:
REXML::Document.entity_expansion_limit = 1000Bản sửa lỗi này sẽ được cung cấp dưới dạng gem và được sử dụng bởi các phiên bản Rails trong tương lai, nhưng người dùng nên thực hiện biện pháp khắc phục ngay lập tức.
Ghi nhận
Ghi nhận Luka Treiber và Mitja Kolsek thuộc ACROS Security đã tiết lộ vấn đề cho Đội An ninh Ruby và Rails.
Ghi nhận Michael Koziarski thuộc Rails Core Team đã tạo bản vá monkey patch để sửa lỗ hổng.
Thay đổi
- 2008-08-29 18:46 +09:00 đã sửa phần tóm tắt để không gây hiểu lầm rằng lỗ hổng này chỉ liên quan đến Rails.
- 2008-11-09 12:40 +09:00 đã sửa một lỗi của bản vá monkey patch.
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