Вразливість відмови в обслуговуванні та небезпечного створення об'єктів у JSON (CVE-2013-0269)
Опублікував usa 22-02-2013
Переклав: Andrii Furmanets
Є вразливість відмови в обслуговуванні та небезпечного створення об’єктів у json, включеному з ruby. Цій вразливості присвоєно ідентифікатор CVE CVE-2013-0269. Ми настійно рекомендуємо оновити ruby.
Деталі
При парсингу певних документів JSON, gem JSON (включає включений з ruby) може бути примушений до створення символів Ruby в цільовій системі. Оскільки символи Ruby не збираються збирачем сміття, це може призвести до атаки відмови в обслуговуванні.
Та сама техніка може використовуватися для створення об’єктів у цільовій системі, які діють як внутрішні об’єкти. Ці об’єкти “як внутрішні” можуть використовуватися для обходу певних механізмів безпеки та можуть використовуватися як трамплін для атак SQL ін’єкції в Ruby on Rails.
Зачеплений код виглядає так:
JSON.parse(user_input)Де змінна `user_input` матиме JSON документ, як це:
{"json_class":"foo"}
Gem JSON спробує знайти константу “foo”. Пошук цієї константи створить символ.
У версії JSON 1.7.x, об’єкти з довільними атрибутами можуть бути створені , використовуючи JSON документи, як це:
{"json_class":"JSON::GenericObject","foo":"bar"}
Цей документ призведе до екземпляра JSON::GenericObject, з атрибутом “foo”, який має значення “bar”. Створення цих об’єктів призведе до довільного створення символів та в деяких випадках може використовуватися для обходу заходів безпеки.
БУДЬ ЛАСКА, ЗВЕРНІТЬ УВАГУ: ця поведінка не змінюється при використанні `JSON.load`. `JSON.load` ніколи не повинен отримувати вхідні дані з невідомих джерел. Якщо ви обробляєте JSON з невідомого джерела, завжди використовуйте `JSON.parse`.
Всі користувачі, які запускають зачеплений випуск, повинні або оновитися, або використовувати один з обхідних шляхів негайно.
Обхідні шляхи
Для користувачів, які не можуть оновити ruby або gem JSON, змініть ваш код з цього:
JSON.parse(json)На це:
JSON.parse(json, :create_additions => false)Якщо ви не можете змінити використання `JSON.parse` (наприклад, ви використовуєте gem, який залежить від `JSON.parse`, як multi_json), тоді застосуйте цей monkey patch:
module JSON
class << self
alias :old_parse :parse
def parse(json, args = {})
args[:create_additions] = false
old_parse(json, args)
end
end
endЗачеплені версії
- Всі версії ruby 1.9 до ruby 1.9.3 рівня патчу 392
- Всі версії ruby 2.0 до ruby 2.0.0 рівня патчу 0
- до ревізії trunk 39208
Подяка
Величезна подяка наступним людям за відповідальне розкриття цієї проблеми та роботу з командою Rails для її виправлення:
- Thomas Hollstegge з Zweitag (www.zweitag.de)
- Ben Murphy
Історія
- Спочатку опубліковано 2013-02-22 12:00:00 (UTC)
Останні новини
Вийшов Ruby 3.4.9
Вийшов Ruby 3.4.9.
Опублікував nagachika 11-03-2026
Вийшов 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