Методи 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 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