Вразливість DoS у REXML
Опублікував Shugo Maeda 23-08-2008
Переклав: Andrii Furmanets
Є вразливість DoS у бібліотеці REXML, включеній у стандартну бібліотеку Ruby. Техніка атаки, що називається “вибух XML сутностей”, може використовуватися для віддаленого знешкодження (вимкнення) будь-якої програми, яка парсить XML, наданий користувачем, використовуючи REXML.
Більшість додатків Rails будуть вразливими, оскільки Rails парсить XML, наданий користувачем, використовуючи REXML за замовчуванням.
Вплив
Зловмисник може спричинити відмову в обслуговуванні, змусивши REXML парсити документ, що містить рекурсивно вкладені сутності, такі як:
<?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>Вразливі версії
Серія 1.8
- 1.8.6-p287 та всі попередні версії
- 1.8.7-p72 та всі попередні версії
Серія 1.9
- всі версії
Рішення
Будь ласка, завантажте наступний monkey patch для виправлення цієї проблеми.
Потім виправте вашу програму, щоб завантажувати rexml-expansion-fix2.rb перед використанням REXML.
require "rexml-expansion-fix2"
...
doc = REXML::Document.new(str)
...Якщо у вас є додаток Rails, скопіюйте rexml-expansion-fix2.rb в директорію на шляху завантаження (таку як RAILS_ROOT/lib/), та додайте наступний рядок у config/environment.rb.
require "rexml-expansion-fix2"Якщо ваша програма Rails 2.1 або пізніша, ви можете просто скопіювати rexml-expansion-fix2.rb до RAILS_ROOT/config/initializers, і він буде завантажуватися автоматично.
За замовчуванням, ліміт розширення XML сутностей 10000. Ви можете змінити його, змінюючи REXML::Document.entity_expansion_limit. наприклад:
REXML::Document.entity_expansion_limit = 1000Це виправлення буде доступне як gem та використовуватиметься майбутніми версіями rails, але користувачі повинні вжити виправних заходів негайно.
Подяка
Подяка Luka Treiber та Mitja Kolsek з ACROS Security за розкриття проблеми командам безпеки Ruby та Rails.
Подяка Michael Koziarski з команди ядра Rails за створення monkey patch для виправлення вразливості.
Зміни
- 2008-08-29 18:46 +09:00 виправлено підсумок, щоб не вводити в оману, що ця вразливість специфічна для Rails.
- 2008-11-09 12:40 +09:00 виправлено помилку monkey patch.
Останні новини
Вийшов Ruby 3.3.12
Вийшов Ruby 3.3.12.
Опублікував hsbt 16-07-2026
Вийшов Ruby 4.0.6
Вийшов Ruby 4.0.6.
Опублікував k0kubun 14-07-2026
Вийшов Ruby 3.4.10
Вийшов Ruby 3.4.10.
Опублікував nagachika 30-06-2026
Вийшов Ruby 4.0.5
Вийшов Ruby 4.0.5.
Опублікував k0kubun 20-05-2026