CVE-2014-8080: Відмова в обслуговуванні розширення XML
Опублікував zzak 27-10-2014
Переклав: Andrii Furmanets
Необмежене розширення сутності може призвести до вразливості DoS в REXML. Цій вразливості присвоєно ідентифікатор CVE CVE-2014-8080. Ми настійно рекомендуємо оновити Ruby.
Деталі
При читанні текстових вузлів з XML документа, парсер REXML може бути примушений до виділення надзвичайно великих об’єктів рядків, які можуть споживати всю пам’ять на машині, спричиняючи відмову в обслуговуванні.
Зачеплений код виглядатиме приблизно так:
require 'rexml/document'
xml = <<XML
<!DOCTYPE root [
# ENTITY expansion vector
]>
<cd></cd>
XML
p REXML::Document.new(xml)Всі користувачі, які запускають зачеплений випуск, повинні або оновитися, або використовувати один з обхідних шляхів негайно.
Зачеплені версії
- Всі версії Ruby 1.9 до Ruby 1.9.3 рівня патчу 550
- Всі версії Ruby 2.0 до Ruby 2.0.0 рівня патчу 594
- Всі версії Ruby 2.1 до Ruby 2.1.4
- до ревізії trunk 48161
Обхідні шляхи
Якщо ви не можете оновити Ruby, використовуйте цей monkey patch як обхідний шлях на версіях 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Для версій Ruby старіших за 2.1.0, ви можете використовувати наступний monkey patch:
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
endПодяка
Дякуємо Willis Vandevanter за повідомлення про цю проблему.
Історія
- Спочатку опубліковано 2014-10-27 12:00:00 (UTC)
Останні новини
Вийшов Ruby 3.2.10
Вийшов Ruby 3.2.10.
Опублікував hsbt 14-01-2026
Вийшов Ruby 4.0.1
Вийшов Ruby 4.0.1.
Опублікував k0kubun 13-01-2026
Вийшов Ruby 4.0.0
Ми раді повідомити про випуск Ruby 4.0.0. Ruby 4.0 представляє “Ruby Box” та “ZJIT”, а також додає багато покращень.
Опублікував naruse 25-12-2025
Новий вигляд документації Ruby
Слідом за ре-дизайном ruby-lang.org, ми маємо більше новин, щоб відсвяткувати 30-річчя Ruby: docs.ruby-lang.org має повністю новий вигляд завдяки Aliki — новій темі за замовчуванням для...
Опублікував Stan Lo 23-12-2025