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

Вийшов Ruby 3.2.11. Цей реліз містить оновлення gem zlib, яке усуває CVE-2026-27820.

Опублікував hsbt 27-03-2026

Вийшов Ruby 3.3.11

Вийшов Ruby 3.3.11. Цей реліз містить оновлення gem zlib, яке усуває CVE-2026-27820, а також кілька виправлень помилок.

Опублікував hsbt 26-03-2026

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