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 = 1000

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