Методи 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.3
Вийшов Ruby 4.0.3.
Опублікував k0kubun 21-04-2026
Вийшов 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
Вийшов Ruby 4.0.2
Вийшов Ruby 4.0.2.
Опублікував k0kubun 16-03-2026