CVE-2014-8090: Tấn công từ chối dịch vụ giãn nở XML khác

Sự giãn nở thực thể không giới hạn có thể dẫn đến lỗ hổng DoS ở REXML, giống “Entity expansion DoS vulnerability in REXML (XML bomb, CVE-2013-1821)”“CVE-2014-8080: Tấn công từ chối dịch vụ giãn nở XML (XML Expansion)”. Lỗ hổng này đã được gán nhận dạng CVE CVE-2014-8090. Chúng tôi mạnh mẽ khuyến cáo nâng cấp lên Ruby bản mới nhất.

Chi tiết

Đây là bản sửa bổ sung cho CVE-2013-1821CVE-2014-8080. Các bản vá trước đã giải quyết vấn đề giãn nỡ đệ quy ở một số điểm và tổng kích thước các string tạo ra. Tuy nhiên, chúng chưa xem xét giới hạn đầu được sự dụng cho giãn nở thực thể. Do đó giãn nở đệ quy với một xâu rỗng có thể gây ra 100% CPU bị chiếm dụng. Khi đọc các text node từ một XML document, bộ phân tích cú pháp REXML có thể bị ép phải cấp phát các đối tượng string kích thước khổng lồ dẫn đến ngốn hết bộ nhớ của máy tính, và gây ra từ chối dịch vụ.

Code bị ảnh hưởng sẽ giống như:

require 'rexml/document'

xml = <<XML
<!DOCTYPE root [
  # ENTITY expansion vector
]>
<cd></cd>
XML

p REXML::Document.new(xml)

Tất cả người dùng đang chạy các phiên bản bị ảnh hưởng nên hoặc nâng cấp hoặc sử dụng một trong các giải pháp thay thế ngay lập tức.

Các phiên bản bị ảnh hưởng

  • Tất cả các phiên bản Ruby 1.9 trước Ruby 1.9.3 patchlevel 551
  • Tất cả các phiên bản Ruby 2.0 trước Ruby 2.0.0 patchlevel 598
  • Tất cả các phiên bản Ruby 2.1 trước Ruby 2.1.5
  • trước trunk revision 48402

Giải pháp khác

Nếu bạn không thể nâng cấp Ruby, sử dụng bản vá tạm sau như là một giải pháp thay thế:

class REXML::Document
  def document
    self
  end
end

Cảm ơn

Cảm ơn Tomas Hoger đã báo cáo vấn đề này.

Lịch sử

  • Phát hành lần đầu vào 2014-11-13 12:00:00 UTC