Вразливість 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

Вийшов Ruby 4.0.0 preview3

Раді повідомити про вихід Ruby 4.0.0-preview3. Ruby 4.0 вводить Ruby::Box і “ZJIT” та додає багато покращень.

Опублікував naruse 18-12-2025

Більше новин...