Вразливість 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 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
Оновлення айдентики нашого сайту
Раді оголосити про комплексне оновлення нашого сайту. Дизайн для цього оновлення створила Taeko Akatsuka.
Опублікував Hiroshi SHIBATA 22-12-2025
Вийшов Ruby 4.0.0 preview3
Раді повідомити про вихід Ruby 4.0.0-preview3. Ruby 4.0 вводить Ruby::Box і “ZJIT” та додає багато покращень.
Опублікував naruse 18-12-2025