Вразливість обходу $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.3.12
Вийшов Ruby 3.3.12.
Опублікував hsbt 16-07-2026
Вийшов Ruby 4.0.6
Вийшов Ruby 4.0.6.
Опублікував k0kubun 14-07-2026
Вийшов Ruby 3.4.10
Вийшов Ruby 3.4.10.
Опублікував nagachika 30-06-2026
Вийшов Ruby 4.0.5
Вийшов Ruby 4.0.5.
Опублікував k0kubun 20-05-2026