Виявлено вразливості для Exception#to\_s, NameError#to\_s, та
name\_err\_mesg\_to\_s(), яка є внутрішньою API інтерпретатора Ruby. Зловмисний
код користувача може обійти перевірку $SAFE, використовуючи одну з цих
дірок безпеки.

## Деталі

Механізм $SAFE Ruby дозволяє ненадійним кодам користувачів працювати в режимі $SAFE
&gt;= 4. Це свого роду пісочниця, тому деякі операції
обмежені в цьому режимі, щоб захистити інші дані поза пісочницею.

Проблема, знайдена, була навколо цього механізму. Exception#to\_s,
NameError#to\_s, та внутрішня API інтерпретатора name\_err\_mesg\_to\_s()
не обробляли правильно біти $SAFE, тому об'єкт String, який не є
таїнтованим, може деструктивно бути позначений як таїнтований, використовуючи їх. Використовуючи
це, ненадійний код у пісочниці може модифікувати раніше нетаїнтований
рядок деструктивно.

Ruby 1.8 колись мав [схожу проблему безпеки][1]. Він виправив
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.




[1]: https://www.ruby-lang.org/uk/news/2011/02/18/exception-methods-can-bypass-safe/
