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

Рішення

Будь ласка, оновіться до новішої версії.

Оновлення

Останні новини

Вийшов 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

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