Вразливість обходу $SAFE щодо Exception#to_s / NameError#to_s (CVE-2012-4464, CVE-2012-4466)
Опублікував usa 12-10-2012
Переклав: Andrii Furmanets
Виявлено вразливості для Exception#to_s, NameError#to_s, та name_err_mesg_to_s(), яка є внутрішньою API інтерпретатора Ruby. Зловмисний код користувача може обійти перевірку $SAFE, використовуючи одну з цих дірок безпеки.
Деталі
Механізм $SAFE Ruby дозволяє ненадійним кодам користувачів працювати в режимі $SAFE >= 4. Це свого роду пісочниця, тому деякі операції обмежені в цьому режимі, щоб захистити інші дані поза пісочницею.
Проблема, знайдена, була навколо цього механізму. Exception#to_s, NameError#to_s, та внутрішня API інтерпретатора name_err_mesg_to_s() не обробляли правильно біти $SAFE, тому об’єкт String, який не є таїнтованим, може деструктивно бути позначений як таїнтований, використовуючи їх. Використовуючи це, ненадійний код у пісочниці може модифікувати раніше нетаїнтований рядок деструктивно.
Ruby 1.8 колись мав схожу проблему безпеки. Він виправив Exception#to_s та NameError#to_s, але проблема name_err_mesg_to_str() пережила попереднє виправлення безпеки.
Зачеплені версії
- всі Ruby 1.8.7 до рівня патчу 371
- всі Ruby 1.9.3 до рівня патчу 286
- всі гілки розробки Ruby 2.0 до ревізії r37068
Рішення
Оновіться до останньої версії.
Подяка
Цю вразливість знайшов Tyler Hickes.
Оновлення
- Спочатку опубліковано 2012-10-12 19:17:50 JST.
Останні новини
Вийшов 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
Новий вигляд документації Ruby
Слідом за ре-дизайном ruby-lang.org, ми маємо більше новин, щоб відсвяткувати 30-річчя Ruby: docs.ruby-lang.org має повністю новий вигляд завдяки Aliki — новій темі за замовчуванням для...
Опублікував Stan Lo 23-12-2025