CVE-2014-8080: Tấn công từ chối dịch vụ bằng mở rộng XML
Đăng bởi zzak vào 27 Oct 2014
Mở rộng entity không giới hạn có thể dẫn đến lỗ hổng DoS trong REXML. Lỗ hổng này đã được gán mã định danh CVE CVE-2014-8080. Chúng tôi khuyến nghị mạnh mẽ nâng cấp Ruby.
Chi tiết
Khi đọc các nút văn bản từ tài liệu XML, bộ phân tích REXML có thể bị buộc phải cấp phát các đối tượng chuỗi cực lớn có thể tiêu thụ toàn bộ bộ nhớ trên máy, gây ra từ chối dịch vụ.
Mã bị ảnh hưởng sẽ trông như thế này:
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 phiên bản bị ảnh hưởng nên nâng cấp hoặc sử dụng một trong các giải pháp tạm thời ngay lập tức.
Các phiên bản bị ảnh hưởng
- Tất cả phiên bản Ruby 1.9 trước Ruby 1.9.3 patchlevel 550
- Tất cả phiên bản Ruby 2.0 trước Ruby 2.0.0 patchlevel 594
- Tất cả phiên bản Ruby 2.1 trước Ruby 2.1.4
- trước trunk revision 48161
Giải pháp tạm thời
Nếu bạn không thể nâng cấp Ruby, hãy sử dụng monkey patch này làm giải pháp tạm thời trên các phiên bản Ruby 2.1.0+:
class REXML::Entity
def value
if @value
matches = @value.scan(PEREFERENCE_RE)
rv = @value.clone
if @parent
sum = 0
matches.each do |entity_reference|
entity_value = @parent.entity( entity_reference[0] )
if sum + entity_value.bytesize > Security.entity_expansion_text_limit
raise "entity expansion has grown too large"
else
sum += entity_value.bytesize
end
rv.gsub!( /%#{entity_reference.join};/um, entity_value )
end
end
return rv
end
nil
end
endĐối với các phiên bản Ruby cũ hơn 2.1.0, bạn có thể sử dụng monkey patch sau:
class REXML::Entity
def value
if @value
matches = @value.scan(PEREFERENCE_RE)
rv = @value.clone
if @parent
sum = 0
matches.each do |entity_reference|
entity_value = @parent.entity( entity_reference[0] )
if sum + entity_value.bytesize > Document.entity_expansion_text_limit
raise "entity expansion has grown too large"
else
sum += entity_value.bytesize
end
rv.gsub!( /%#{entity_reference.join};/um, entity_value )
end
end
return rv
end
nil
end
endGhi công
Cảm ơn Willis Vandevanter đã báo cáo vấn đề này.
Lịch sử
- Công bố lần đầu vào 2014-10-27 12:00:00 (UTC)
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