Методи Exception можуть обійти $SAFE
Опублікував Urabe Shyouhei 18-02-2011
Переклав: Andrii Furmanets
Метод Exception#to_s може використовуватися для обходу перевірки $SAFE, що дозволяє ненадійним кодам модифікувати довільні рядки.
Детальний опис
У семантиці $SAFE Ruby, рівень безпеки 4 використовується для запуску ненадійного коду (такого як плагін). Тому на вищих рівнях безпеки деякі види операцій заборонені, щоб запобігти ненадійним кодам атакувати зовнішні (надійні) дані.
Exception#to_s виявився проблематичним навколо цього. Метод може обдурити механізм рівня безпеки та деструктивно модифікує нетаїнтований рядок, щоб стати таїнтованим. З цим зловмисник може модифікувати довільні нетаїнтовані рядки, як це:
$secret_path = "foo"
proc do
$SAFE = 4
Exception.new($secret_path).to_s
$secret_path.replace "/etc/passwd"
end.call
open($secret_path) do
...
end
Зачеплені версії
На щастя, ця атака неефективна для серії 1.9.x ruby. Зачеплені версії обмежені до:
- Ruby 1.8.6 рівень патчу 420 та всі попередні версії
- Ruby 1.8.7 рівень патчу 330 та всі попередні версії
- Версії розробки Ruby 1.8 (1.8.8dev)
Рішення
Будь ласка, оновіться до новішої версії.
Оновлення
- 1.8.7-334 випущено для виправлення цієї проблеми. Користувачів 1.8.7 заохочується оновитися.
Останні новини
Вийшов Ruby 3.4.9
Вийшов Ruby 3.4.9.
Опублікував nagachika 11-03-2026
Вийшов 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